The variable shortcutWindows is moved to w_global. Now, the shortcuts
are used in whole Window Maker, not only in the current screen.

Signed-off-by: Rodolfo García Peñas (kix) <[email protected]>
---
 src/WindowMaker.h |  3 +++
 src/event.c       | 27 ++++++++++++---------------
 src/screen.h      |  4 ----
 src/session.c     |  4 ++--
 src/window.c      | 23 ++++++++++++-----------
 src/winmenu.c     | 20 +++++++++-----------
 6 files changed, 38 insertions(+), 43 deletions(-)

diff --git a/src/WindowMaker.h b/src/WindowMaker.h
index 2e5742f..a04f1fa 100644
--- a/src/WindowMaker.h
+++ b/src/WindowMaker.h
@@ -532,6 +532,9 @@ extern struct wmaker_global_variables {
        /* Session related */
        WMPropList *session_state;
 
+       /* Keyboard and shortcuts */
+       WMArray *shortcutWindows[MAX_WINDOW_SHORTCUTS];
+
 } w_global;
 
 extern unsigned int ValidModMask;
diff --git a/src/event.c b/src/event.c
index 928ebcb..2416c48 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1635,8 +1635,8 @@ static void handleKeyPress(XEvent * event)
 
                widx = command - WKBD_WINDOW1;
 
-               if (scr->shortcutWindows[widx]) {
-                       WMArray *list = scr->shortcutWindows[widx];
+               if (w_global.shortcutWindows[widx]) {
+                       WMArray *list = w_global.shortcutWindows[widx];
                        int cw;
                        int count = WMGetArrayItemCount(list);
                        WWindow *twin;
@@ -1662,18 +1662,16 @@ static void handleKeyPress(XEvent * event)
                        WMAddToArray(list, twin);
 
                } else if (wwin && ISMAPPED(wwin) && ISFOCUSED(wwin)) {
-                       if (scr->shortcutWindows[widx]) {
-                               WMFreeArray(scr->shortcutWindows[widx]);
-                               scr->shortcutWindows[widx] = NULL;
+                       if (w_global.shortcutWindows[widx]) {
+                               WMFreeArray(w_global.shortcutWindows[widx]);
+                               w_global.shortcutWindows[widx] = NULL;
                        }
 
                        if (wwin->flags.selected && scr->selected_windows) {
-                               scr->shortcutWindows[widx] = 
WMDuplicateArray(scr->selected_windows);
-                               
/*WMRemoveFromArray(scr->shortcutWindows[index], wwin);
-                                  WMInsertInArray(scr->shortcutWindows[index], 
0, wwin); */
+                               w_global.shortcutWindows[widx] = 
WMDuplicateArray(scr->selected_windows);
                        } else {
-                               scr->shortcutWindows[widx] = WMCreateArray(4);
-                               WMAddToArray(scr->shortcutWindows[widx], wwin);
+                               w_global.shortcutWindows[widx] = 
WMCreateArray(4);
+                               WMAddToArray(w_global.shortcutWindows[widx], 
wwin);
                        }
 
                        wSelectWindow(wwin, !wwin->flags.selected);
@@ -1683,12 +1681,11 @@ static void handleKeyPress(XEvent * event)
                        XFlush(dpy);
 
                } else if (scr->selected_windows && 
WMGetArrayItemCount(scr->selected_windows)) {
-
                        if (wwin->flags.selected && scr->selected_windows) {
-                               if (scr->shortcutWindows[widx]) {
-                                       WMFreeArray(scr->shortcutWindows[widx]);
-                               }
-                               scr->shortcutWindows[widx] = 
WMDuplicateArray(scr->selected_windows);
+                               if (w_global.shortcutWindows[widx])
+                                       
WMFreeArray(w_global.shortcutWindows[widx]);
+
+                               w_global.shortcutWindows[widx] = 
WMDuplicateArray(scr->selected_windows);
                        }
                }
 
diff --git a/src/screen.h b/src/screen.h
index 5675915..ea1edcc 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -257,10 +257,6 @@ typedef struct _WScreen {
     WMHandlerID *autoRaiseTimer;
     Window autoRaiseWindow;           /* window that is scheduled to be
                                         * raised */
-
-    /* for window shortcuts */
-    WMArray *shortcutWindows[MAX_WINDOW_SHORTCUTS];
-
 #ifdef XDND
     char *xdestring;
 #endif
diff --git a/src/session.c b/src/session.c
index c2c67bb..d6c0bf6 100644
--- a/src/session.c
+++ b/src/session.c
@@ -210,8 +210,8 @@ static WMPropList *makeWindowState(WWindow * wwin, 
WApplication * wapp)
                geometry = WMCreatePLString(buffer);
 
                for (mask = 0, i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
-                       if (scr->shortcutWindows[i] != NULL &&
-                           WMGetFirstInArray(scr->shortcutWindows[i], wwin) != 
WANotFound)
+                       if (w_global.shortcutWindows[i] != NULL &&
+                           WMGetFirstInArray(w_global.shortcutWindows[i], 
wwin) != WANotFound)
                                mask |= 1 << i;
                }
 
diff --git a/src/window.c b/src/window.c
index 92dfb15..4bcda9d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -185,14 +185,14 @@ void wWindowDestroy(WWindow *wwin)
        wwin->flags.destroyed = 1;
 
        for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
-               if (!wwin->screen_ptr->shortcutWindows[i])
+               if (!w_global.shortcutWindows[i])
                        continue;
 
-               WMRemoveFromArray(wwin->screen_ptr->shortcutWindows[i], wwin);
+               WMRemoveFromArray(w_global.shortcutWindows[i], wwin);
 
-               if (!WMGetArrayItemCount(wwin->screen_ptr->shortcutWindows[i])) 
{
-                       WMFreeArray(wwin->screen_ptr->shortcutWindows[i]);
-                       wwin->screen_ptr->shortcutWindows[i] = NULL;
+               if (!WMGetArrayItemCount(w_global.shortcutWindows[i])) {
+                       WMFreeArray(w_global.shortcutWindows[i]);
+                       w_global.shortcutWindows[i] = NULL;
                }
        }
 
@@ -891,10 +891,10 @@ WWindow *wManageWindow(WScreen *scr, Window window)
 
                                for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
                                        if (mask & (1 << i)) {
-                                               if (!scr->shortcutWindows[i])
-                                                       scr->shortcutWindows[i] 
= WMCreateArray(4);
+                                               if 
(!w_global.shortcutWindows[i])
+                                                       
w_global.shortcutWindows[i] = WMCreateArray(4);
 
-                                               
WMAddToArray(scr->shortcutWindows[i], wwin);
+                                               
WMAddToArray(w_global.shortcutWindows[i], wwin);
                                        }
                                }
                        }
@@ -2273,7 +2273,7 @@ void wWindowConfigureBorders(WWindow *wwin)
        }
 }
 
-void wWindowSaveState(WWindow * wwin)
+void wWindowSaveState(WWindow *wwin)
 {
        long data[10];
        int i;
@@ -2297,10 +2297,11 @@ void wWindowSaveState(WWindow * wwin)
        }
 
        for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
-               if (wwin->screen_ptr->shortcutWindows[i] &&
-                   WMCountInArray(wwin->screen_ptr->shortcutWindows[i], wwin))
+               if (w_global.shortcutWindows[i] &&
+                   WMCountInArray(w_global.shortcutWindows[i], wwin))
                        data[9] |= 1 << i;
        }
+
        XChangeProperty(dpy, wwin->client_win, w_global.atom.wmaker.state,
                        w_global.atom.wmaker.state, 32, PropModeReplace, 
(unsigned char *)data, 10);
 }
diff --git a/src/winmenu.c b/src/winmenu.c
index 4bf8c1a..e3dbced 100644
--- a/src/winmenu.c
+++ b/src/winmenu.c
@@ -187,24 +187,22 @@ static void switchWSCommand(WMenu * menu, WMenuEntry * 
entry)
        wWindowChangeWorkspace(wwin, entry->order);
 }
 
-static void makeShortcutCommand(WMenu * menu, WMenuEntry * entry)
+static void makeShortcutCommand(WMenu *menu, WMenuEntry *entry)
 {
        WWindow *wwin = (WWindow *) entry->clientdata;
        WScreen *scr = wwin->screen_ptr;
        int index = entry->order - WO_ENTRIES;
 
-       if (scr->shortcutWindows[index]) {
-               WMFreeArray(scr->shortcutWindows[index]);
-               scr->shortcutWindows[index] = NULL;
+       if (w_global.shortcutWindows[index]) {
+               WMFreeArray(w_global.shortcutWindows[index]);
+               w_global.shortcutWindows[index] = NULL;
        }
 
        if (wwin->flags.selected && scr->selected_windows) {
-               scr->shortcutWindows[index] = 
WMDuplicateArray(scr->selected_windows);
-               /*WMRemoveFromArray(scr->shortcutWindows[index], wwin);
-                  WMInsertInArray(scr->shortcutWindows[index], 0, wwin); */
+               w_global.shortcutWindows[index] = 
WMDuplicateArray(scr->selected_windows);
        } else {
-               scr->shortcutWindows[index] = WMCreateArray(4);
-               WMAddToArray(scr->shortcutWindows[index], wwin);
+               w_global.shortcutWindows[index] = WMCreateArray(4);
+               WMAddToArray(w_global.shortcutWindows[index], wwin);
        }
 
        wSelectWindow(wwin, !wwin->flags.selected);
@@ -253,7 +251,7 @@ static void updateWorkspaceMenu(WMenu * menu)
                wMenuRealize(menu);
 }
 
-static void updateMakeShortcutMenu(WMenu * menu, WWindow * wwin)
+static void updateMakeShortcutMenu(WMenu *menu, WWindow *wwin)
 {
        WMenu *smenu = menu->cascades[menu->entries[MC_SHORTCUT]->cascade];
        int i;
@@ -271,7 +269,7 @@ static void updateMakeShortcutMenu(WMenu * menu, WWindow * 
wwin)
                char *tmp;
                int shortcutNo = i - WO_ENTRIES;
                WMenuEntry *entry = smenu->entries[i];
-               WMArray *shortSelWindows = 
wwin->screen_ptr->shortcutWindows[shortcutNo];
+               WMArray *shortSelWindows = w_global.shortcutWindows[shortcutNo];
 
                snprintf(buffer, buflen, "%s %i", _("Set Shortcut"), shortcutNo 
+ 1);
 
-- 
1.8.4.rc3


-- 
To unsubscribe, send mail to [email protected].

Reply via email to