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].
