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,
+ "©");
+ 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