r9533 MarkieB - /branches/MarkieB/windows/windows/gui.c

netsurf at semichrome.net netsurf at semichrome.net
Tue Sep 1 14:08:53 BST 2009


Author: MarkieB
Date: Tue Sep  1 08:08:53 2009
New Revision: 9533

URL: http://source.netsurf-browser.org?rev=9533&view=rev
Log:
right-click menu

Modified:
    branches/MarkieB/windows/windows/gui.c

Modified: branches/MarkieB/windows/windows/gui.c
URL: http://source.netsurf-browser.org/branches/MarkieB/windows/windows/gui.c?rev=9533&r1=9532&r2=9533&view=diff
==============================================================================
--- branches/MarkieB/windows/windows/gui.c (original)
+++ branches/MarkieB/windows/windows/gui.c Tue Sep  1 08:08:53 2009
@@ -89,6 +89,7 @@
 	HWND		vscroll; /**< vertical scrollbar handle */
 	HWND		hscroll; /**< horizontal scrollbar handle */
 	HMENU		mainmenu; /**< the main menu */
+	HMENU		rclick; /**< the right-click menu */
 	HDC		bufferdc; /**< the screen buffer */
 	HBITMAP		bufferbm; /**< the buffer bitmap */
 	struct nsws_localhistory	*localhistory;
@@ -198,6 +199,7 @@
 static void nsws_window_init_pointers(void);
 static void redraw(void);
 static void nsws_window_update_forward_back(struct gui_window *);
+static void nsws_update_edit(struct gui_window *w);
 static bool gui_selection_traverse_handler(const char *text, size_t length,
 		struct box *box, void *handle, const char *space_text,
 		size_t space_length);
@@ -811,36 +813,16 @@
 		return DefWindowProc(hwnd, msg, wparam, lparam);
 		break;
 	}
-	case WM_ENTERMENULOOP: {
-		bool paste, copy, del;
-		if (GetFocus() == w->urlbar) {
-			DWORD i, ii;
-			SendMessage(w->urlbar, EM_GETSEL, (WPARAM)&i,
-					(LPARAM)&ii);
-			paste = true;
-			copy = (i != ii);
-			del = (i != ii);					
-						
-		} else if ((w->bw != NULL) && (w->bw->sel != NULL)){
-			paste = (w->bw->paste_callback != NULL);
-			copy = w->bw->sel->defined;
-			del = ((w->bw->sel->defined) && 
-					(w->bw->caret_callback != NULL));
-		} else {
-			paste = false;
-			copy = false;
-			del = false;
-		}
-		EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_PASTE, (paste ?
-				MF_ENABLED : MF_GRAYED));
-		EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_COPY, (copy ?
-				MF_ENABLED : MF_GRAYED));
-		EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_CUT, (del ?
-				MF_ENABLED : MF_GRAYED));
-		EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_DELETE, (del ?
-				MF_ENABLED : MF_GRAYED));
-						
+	case WM_ENTERMENULOOP:
+		nsws_update_edit(w);
 		return DefWindowProc(hwnd, msg, wparam, lparam);
+	case WM_CONTEXTMENU: {
+		int x,y;
+		x = GET_X_LPARAM(lparam);
+		y = GET_Y_LPARAM(lparam);
+		nsws_update_edit(w);
+		TrackPopupMenu(w->rclick, TPM_CENTERALIGN | TPM_TOPALIGN, x, y,
+				0, hwnd, NULL);
 	}
 	case WM_COMMAND:
 	{
@@ -1540,7 +1522,23 @@
 	
 	SetMenu(w->main, hMenu);
 	w->mainmenu = hMenu;
-
+	
+	hsubMenu = CreatePopupMenu();
+	AppendMenu(hsubMenu, MF_STRING, NSWS_ID_NAV_BACK, "&Back");
+	AppendMenu(hsubMenu, MF_STRING, NSWS_ID_NAV_FORWARD, "F&orward");
+	AppendMenu(hsubMenu, MF_STRING, NSWS_ID_NAV_HOME, "&Home");
+	AppendMenu(hsubMenu, MF_STRING, NSWS_ID_NAV_STOP, "&Stop");
+	AppendMenu(hsubMenu, MF_STRING, NSWS_ID_NAV_RELOAD, "&Reload");
+	AppendMenu(hsubMenu, MF_SEPARATOR, 0, NULL);
+	AppendMenu(hsubMenu, MF_STRING | MF_GRAYED, NSWS_ID_EDIT_CUT, "cu&t");
+	AppendMenu(hsubMenu, MF_STRING | MF_GRAYED, NSWS_ID_EDIT_COPY,
+			"&copy");
+	AppendMenu(hsubMenu, MF_STRING | MF_GRAYED, NSWS_ID_EDIT_PASTE,
+			"&paste");
+	AppendMenu(hsubMenu, MF_STRING | MF_GRAYED, NSWS_ID_EDIT_DELETE,
+			"&delete");
+	
+	w->rclick = hsubMenu;
 	nsws_window_set_accels(w);
 }
 
@@ -1768,6 +1766,10 @@
 				(forward ? MF_ENABLED : MF_GRAYED));
 		EnableMenuItem(w->mainmenu, NSWS_ID_NAV_BACK, 
 				(back ? MF_ENABLED : MF_GRAYED));
+		EnableMenuItem(w->rclick, NSWS_ID_NAV_FORWARD, 
+				(forward ? MF_ENABLED : MF_GRAYED));
+		EnableMenuItem(w->rclick, NSWS_ID_NAV_BACK, 
+				(back ? MF_ENABLED : MF_GRAYED));
 	}
 	if (w->toolbar != NULL) {
 		SendMessage(w->toolbar, TB_SETSTATE,
@@ -1780,6 +1782,44 @@
 				TBSTATE_INDETERMINATE), 0));
 	}
 }
+
+void nsws_update_edit(struct gui_window *w)
+{
+	bool paste, copy, del;
+	if (GetFocus() == w->urlbar) {
+		DWORD i, ii;
+		SendMessage(w->urlbar, EM_GETSEL, (WPARAM)&i,
+			     (LPARAM)&ii);
+			     paste = true;
+			     copy = (i != ii);
+			     del = (i != ii);					
+			     
+	} else if ((w->bw != NULL) && (w->bw->sel != NULL)){
+		paste = (w->bw->paste_callback != NULL);
+		copy = w->bw->sel->defined;
+		del = ((w->bw->sel->defined) && 
+		(w->bw->caret_callback != NULL));
+	} else {
+		paste = false;
+		copy = false;
+		del = false;
+	}
+	EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_PASTE, (paste ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_COPY, (copy ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_CUT, (del ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->mainmenu, NSWS_ID_EDIT_DELETE, (del ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->rclick, NSWS_ID_EDIT_PASTE, (paste ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->rclick, NSWS_ID_EDIT_COPY, (copy ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->rclick, NSWS_ID_EDIT_CUT, (del ?
+	MF_ENABLED : MF_GRAYED));
+	EnableMenuItem(w->rclick, NSWS_ID_EDIT_DELETE, (del ?
+	MF_ENABLED : MF_GRAYED));}
 
 HWND gui_window_main_window(struct gui_window *w)
 {
@@ -2180,6 +2220,10 @@
 		EnableMenuItem(w->mainmenu, NSWS_ID_NAV_STOP, MF_ENABLED);
 		EnableMenuItem(w->mainmenu, NSWS_ID_NAV_RELOAD, MF_GRAYED);
 	}
+	if (w->rclick != NULL) {
+		EnableMenuItem(w->rclick, NSWS_ID_NAV_STOP, MF_ENABLED);
+		EnableMenuItem(w->rclick, NSWS_ID_NAV_RELOAD, MF_GRAYED);
+	}
 	if (w->toolbar != NULL) {
 		SendMessage(w->toolbar, TB_SETSTATE, (WPARAM) NSWS_ID_NAV_STOP, 
 				MAKELONG(TBSTATE_ENABLED, 0));
@@ -2199,6 +2243,10 @@
 	if (w->mainmenu != NULL) {
 		EnableMenuItem(w->mainmenu, NSWS_ID_NAV_STOP, MF_GRAYED);
 		EnableMenuItem(w->mainmenu, NSWS_ID_NAV_RELOAD, MF_ENABLED);
+	}
+	if (w->rclick != NULL) {
+		EnableMenuItem(w->rclick, NSWS_ID_NAV_STOP, MF_GRAYED);
+		EnableMenuItem(w->rclick, NSWS_ID_NAV_RELOAD, MF_ENABLED);
 	}
 	if (w->toolbar != NULL) {
 		SendMessage(w->toolbar, TB_SETSTATE, (WPARAM) NSWS_ID_NAV_STOP, 




More information about the netsurf-commits mailing list