Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37479831
en ru br
Репозитории ALT
S:0.96.0-alt1
5.1: 0.92.0-alt6
4.1: 0.92.0-alt2
4.0: 0.92.0-alt2
3.0: 0.91.0-alt1
+backports:0.92.0-alt0.M30.1
www.altlinux.org/Changes

Группа :: Графические оболочки/Window Maker
Пакет: WindowMaker

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: WindowMaker-0.92.0-hmepas-swmenu_rclick.patch
Скачать


 src/funcs.h   |    7 +++++++
 src/menu.c    |   23 ++++++++++++++++++++++-
 src/winmenu.c |   45 ++++++++++++++++++++++++++++++++++++++++-----
 3 files changed, 69 insertions(+), 6 deletions(-)
diff --git a/src/funcs.h b/src/funcs.h
index 899d834..47fdc35 100644
--- a/src/funcs.h
+++ b/src/funcs.h
@@ -65,6 +65,13 @@ void InitializeSwitchMenu(void);
 
 void OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard);
 
+// THIS IS NEED FOR MY SW_RIGHT CLICK PATCH
+// (FOR MOVING WINDOW FROM ANOTHER WORKSPACE TO
+// CURRENT) ON NATIVE FUNCTION MOVE TO CURRENT 
+// WORKSPACE IS DISABLED
+// 				HMEPAS
+void OpenWindowMenu2(WWindow *wwin, int x, int y, int keyboard);
+
 void OpenMiniwindowMenu(WWindow *wwin, int x, int y);
 
 void OpenWorkspaceMenu(WScreen *scr, int x, int y);
diff --git a/src/menu.c b/src/menu.c
index 72cbd7c..4fddc48 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -2077,6 +2077,7 @@ delaySelection(void *data)
 static void
 menuMouseDown(WObjDescriptor *desc, XEvent *event)
 {
+    WWindow *wwin; // ADDED BY HMEPAS FOR sw_rclick
     XButtonEvent *bev = &event->xbutton;
     WMenu *menu = desc->parent;
     WMenu *smenu;
@@ -2160,7 +2161,27 @@ menuMouseDown(WObjDescriptor *desc, XEvent *event)
             }
 
         } else if (!delayed_select) {
-            selectEntry(menu, entry_no);
+		// ADDED BY HMEPAS
+		// FOR WindowMenu open by right click on
+		// switchmenu entry
+		if( menu == scr->switch_menu && event->xbutton.button == Button3 ) {
+			selectEntry(menu, entry_no);
+			OpenWindowMenu2( (WWindow*)entry->clientdata,
+					event->xbutton.x_root,
+					event->xbutton.y_root, False);
+			wwin = (WWindow*)entry->clientdata;
+			desc = &wwin->screen_ptr->window_menu->menu->descriptor;
+			event->xany.send_event = True;
+			(*desc->handle_mousedown)(desc, event);
+
+			XUngrabPointer(dpy, CurrentTime);
+			selectEntry(menu, -1);
+			return;
+		}
+		else {
+			selectEntry(menu, entry_no);
+		}
+		// END OF HMEPAS PATCH
         }
 
         if (!wPreferences.wrap_menus && !wPreferences.scrollable_menus) {
diff --git a/src/winmenu.c b/src/winmenu.c
index 5430461..3ddc765 100644
--- a/src/winmenu.c
+++ b/src/winmenu.c
@@ -619,7 +619,6 @@ updateMenuForWindow(WMenu *menu, WWindow *wwin)
     wMenuRealize(menu);
 }
 
-
 void
 OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard)
 {
@@ -650,10 +649,46 @@ OpenWindowMenu(WWindow *wwin, int x, int y, int keyboard)
     updateMenuForWindow(menu, wwin);
 
     x -= menu->frame->core->width/2;
-    if (x + menu->frame->core->width > wwin->frame_x+wwin->frame->core->width)
-        x = wwin->frame_x+wwin->frame->core->width - menu->frame->core->width;
-    if (x < wwin->frame_x)
-        x = wwin->frame_x;
+    if (!wwin->flags.internal_window)
+        wMenuMapAt(menu, x, y, keyboard);
+}
+
+void
+OpenWindowMenu2(WWindow *wwin, int x, int y, int keyboard)
+{
+    int i;
+    WMenu *menu;
+    WScreen *scr = wwin->screen_ptr;
+
+    wwin->flags.menu_open_for_me = 1;
+
+    if (!scr->window_menu) {
+	scr->window_menu = createWindowMenu(scr);
+
+	/* hack to save some memory allocation/deallocation */
+	wfree(scr->window_menu->entries[MC_MINIATURIZE]->text);
+	wfree(scr->window_menu->entries[MC_MAXIMIZE]->text);
+	wfree(scr->window_menu->entries[MC_SHADE]->text);
+    } else {
+	updateWorkspaceMenu(scr->workspace_submenu);
+    }
+
+    menu = scr->window_menu;
+    if (menu->flags.mapped) {
+	wMenuUnmap(menu);
+	if (menu->entries[0]->clientdata==wwin) {
+	    return;
+	}
+    }
+
+    updateMenuForWindow(menu, wwin);
+
+    for (i = 0; i < scr->workspace_submenu->entry_no; i++) {
+	scr->workspace_submenu->entries[i]->clientdata = wwin;
+	wMenuSetEnabled(scr->workspace_submenu, i, True);
+    }
+
+    x -= menu->frame->core->width/2;
 
     if (!wwin->flags.internal_window)
         wMenuMapAt(menu, x, y, keyboard);
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin