83322e0
--- WindowMaker-0.91.0/src/menu.c.vns	2005-05-18 21:46:03 +0400
83322e0
+++ WindowMaker-0.91.0/src/menu.c	2005-05-18 21:46:03 +0400
83322e0
@@ -2077,6 +2077,7 @@
83322e0
 static void
83322e0
 menuMouseDown(WObjDescriptor *desc, XEvent *event)
83322e0
 {
83322e0
+    WWindow *wwin; // ADDED BY HMEPAS FOR sw_rclick
83322e0
     XButtonEvent *bev = &event->xbutton;
83322e0
     WMenu *menu = desc->parent;
83322e0
     WMenu *smenu;
83322e0
@@ -2160,7 +2161,27 @@
83322e0
             }
83322e0
 
83322e0
         } else if (!delayed_select) {
83322e0
-            selectEntry(menu, entry_no);
83322e0
+		// ADDED BY HMEPAS
83322e0
+		// FOR WindowMenu open by right click on
83322e0
+		// switchmenu entry
83322e0
+		if( menu == scr->switch_menu && event->xbutton.button == Button3 ) {
83322e0
+			selectEntry(menu, entry_no);
83322e0
+			OpenWindowMenu2( (WWindow*)entry->clientdata,
83322e0
+					event->xbutton.x_root,
83322e0
+					event->xbutton.y_root, False);
83322e0
+			wwin = (WWindow*)entry->clientdata;
83322e0
+			desc = &wwin->screen_ptr->window_menu->menu->descriptor;
83322e0
+			event->xany.send_event = True;
83322e0
+			(*desc->handle_mousedown)(desc, event);
83322e0
+
83322e0
+			XUngrabPointer(dpy, CurrentTime);
83322e0
+			selectEntry(menu, -1);
83322e0
+			return;
83322e0
+		}
83322e0
+		else {
83322e0
+			selectEntry(menu, entry_no);
83322e0
+		}
83322e0
+		// END OF HMEPAS PATCH
83322e0
         }
83322e0
 
83322e0
         if (!wPreferences.wrap_menus && !wPreferences.scrollable_menus) {
83322e0
--- WindowMaker-0.91.0/src/funcs.h.vns	2004-10-14 22:03:28 +0400
83322e0
+++ WindowMaker-0.91.0/src/funcs.h	2005-05-18 21:46:03 +0400
83322e0
@@ -65,6 +65,13 @@
83322e0
 
83322e0
 void OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard);
83322e0
 
83322e0
+// THIS IS NEED FOR MY SW_RIGHT CLICK PATCH
83322e0
+// (FOR MOVING WINDOW FROM ANOTHER WORKSPACE TO
83322e0
+// CURRENT) ON NATIVE FUNCTION MOVE TO CURRENT 
83322e0
+// WORKSPACE IS DISABLED
83322e0
+// 				HMEPAS
83322e0
+void OpenWindowMenu2(WWindow *wwin, int x, int y, int keyboard);
83322e0
+
83322e0
 void OpenMiniwindowMenu(WWindow *wwin, int x, int y);
83322e0
 
83322e0
 void OpenWorkspaceMenu(WScreen *scr, int x, int y);
83322e0
--- WindowMaker-0.91.0/src/winmenu.c.vns	2004-10-21 07:21:16 +0400
83322e0
+++ WindowMaker-0.91.0/src/winmenu.c	2005-05-18 21:52:50 +0400
83322e0
@@ -619,7 +619,6 @@
83322e0
     wMenuRealize(menu);
83322e0
 }
83322e0
 
83322e0
-
83322e0
 void
83322e0
 OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard)
83322e0
 {
83322e0
@@ -650,10 +649,46 @@
83322e0
     updateMenuForWindow(menu, wwin);
83322e0
 
83322e0
     x -= menu->frame->core->width/2;
83322e0
-    if (x + menu->frame->core->width > wwin->frame_x+wwin->frame->core->width)
83322e0
-        x = wwin->frame_x+wwin->frame->core->width - menu->frame->core->width;
83322e0
-    if (x < wwin->frame_x)
83322e0
-        x = wwin->frame_x;
83322e0
+    if (!wwin->flags.internal_window)
83322e0
+        wMenuMapAt(menu, x, y, keyboard);
83322e0
+}
83322e0
+
83322e0
+void
83322e0
+OpenWindowMenu2(WWindow *wwin, int x, int y, int keyboard)
83322e0
+{
83322e0
+    int i;
83322e0
+    WMenu *menu;
83322e0
+    WScreen *scr = wwin->screen_ptr;
83322e0
+
83322e0
+    wwin->flags.menu_open_for_me = 1;
83322e0
+
83322e0
+    if (!scr->window_menu) {
83322e0
+	scr->window_menu = createWindowMenu(scr);
83322e0
+
83322e0
+	/* hack to save some memory allocation/deallocation */
83322e0
+	wfree(scr->window_menu->entries[MC_MINIATURIZE]->text);
83322e0
+	wfree(scr->window_menu->entries[MC_MAXIMIZE]->text);
83322e0
+	wfree(scr->window_menu->entries[MC_SHADE]->text);
83322e0
+    } else {
83322e0
+	updateWorkspaceMenu(scr->workspace_submenu);
83322e0
+    }
83322e0
+
83322e0
+    menu = scr->window_menu;
83322e0
+    if (menu->flags.mapped) {
83322e0
+	wMenuUnmap(menu);
83322e0
+	if (menu->entries[0]->clientdata==wwin) {
83322e0
+	    return;
83322e0
+	}
83322e0
+    }
83322e0
+
83322e0
+    updateMenuForWindow(menu, wwin);
83322e0
+
83322e0
+    for (i = 0; i < scr->workspace_submenu->entry_no; i++) {
83322e0
+	scr->workspace_submenu->entries[i]->clientdata = wwin;
83322e0
+	wMenuSetEnabled(scr->workspace_submenu, i, True);
83322e0
+    }
83322e0
+
83322e0
+    x -= menu->frame->core->width/2;
83322e0
 
83322e0
     if (!wwin->flags.internal_window)
83322e0
         wMenuMapAt(menu, x, y, keyboard);