From 0de3e590cedeb441d7c5038b8fae26bf851c5fd8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rodolfo=20Garc=C3=ADa=20Pe=C3=B1as=20=28kix=29?= Date: Tue, 8 Oct 2013 00:56:44 +0200 Subject: [PATCH] shortcutWindows moved to w_global The variable shortcutWindows is moved to w_global. Now, the shortcuts are used in whole Window Maker, not only in the current screen. --- src/WindowMaker.h | 5 +++++ src/event.c | 27 ++++++++++++--------------- src/screen.h | 4 ---- src/session.c | 4 ++-- src/window.c | 23 ++++++++++++----------- src/winmenu.c | 20 +++++++++----------- 6 files changed, 40 insertions(+), 43 deletions(-) diff --git a/src/WindowMaker.h b/src/WindowMaker.h index a0801e9c..e31c9c32 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -563,6 +563,11 @@ extern struct wmaker_global_variables { /* Session related */ WMPropList *session_state; + /* Keyboard and shortcuts */ + struct { + WMArray *windows[MAX_WINDOW_SHORTCUTS]; + } shortcut; + /* Application related */ struct WAppIcon *app_icon_list; /* list of all aplication icons */ diff --git a/src/event.c b/src/event.c index 3e79db08..a69be0dc 100644 --- a/src/event.c +++ b/src/event.c @@ -1634,8 +1634,8 @@ static void handleKeyPress(XEvent * event) widx = command - WKBD_WINDOW1; - if (scr->shortcutWindows[widx]) { - WMArray *list = scr->shortcutWindows[widx]; + if (w_global.shortcut.windows[widx]) { + WMArray *list = w_global.shortcut.windows[widx]; int cw; int count = WMGetArrayItemCount(list); WWindow *twin; @@ -1661,18 +1661,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.shortcut.windows[widx]) { + WMFreeArray(w_global.shortcut.windows[widx]); + w_global.shortcut.windows[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.shortcut.windows[widx] = WMDuplicateArray(scr->selected_windows); } else { - scr->shortcutWindows[widx] = WMCreateArray(4); - WMAddToArray(scr->shortcutWindows[widx], wwin); + w_global.shortcut.windows[widx] = WMCreateArray(4); + WMAddToArray(w_global.shortcut.windows[widx], wwin); } wSelectWindow(wwin, !wwin->flags.selected); @@ -1682,12 +1680,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.shortcut.windows[widx]) + WMFreeArray(w_global.shortcut.windows[widx]); + + w_global.shortcut.windows[widx] = WMDuplicateArray(scr->selected_windows); } } diff --git a/src/screen.h b/src/screen.h index 56759153..ea1edccb 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 89784a65..e0b95795 100644 --- a/src/session.c +++ b/src/session.c @@ -208,8 +208,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.shortcut.windows[i] != NULL && + WMGetFirstInArray(w_global.shortcut.windows[i], wwin) != WANotFound) mask |= 1 << i; } diff --git a/src/window.c b/src/window.c index 5ec86308..be5af546 100644 --- a/src/window.c +++ b/src/window.c @@ -184,14 +184,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.shortcut.windows[i]) continue; - WMRemoveFromArray(wwin->screen_ptr->shortcutWindows[i], wwin); + WMRemoveFromArray(w_global.shortcut.windows[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.shortcut.windows[i])) { + WMFreeArray(w_global.shortcut.windows[i]); + w_global.shortcut.windows[i] = NULL; } } @@ -890,10 +890,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.shortcut.windows[i]) + w_global.shortcut.windows[i] = WMCreateArray(4); - WMAddToArray(scr->shortcutWindows[i], wwin); + WMAddToArray(w_global.shortcut.windows[i], wwin); } } } @@ -2272,7 +2272,7 @@ void wWindowConfigureBorders(WWindow *wwin) } } -void wWindowSaveState(WWindow * wwin) +void wWindowSaveState(WWindow *wwin) { long data[10]; int i; @@ -2296,10 +2296,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.shortcut.windows[i] && + WMCountInArray(w_global.shortcut.windows[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 62e93148..b4773a69 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.shortcut.windows[index]) { + WMFreeArray(w_global.shortcut.windows[index]); + w_global.shortcut.windows[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.shortcut.windows[index] = WMDuplicateArray(scr->selected_windows); } else { - scr->shortcutWindows[index] = WMCreateArray(4); - WMAddToArray(scr->shortcutWindows[index], wwin); + w_global.shortcut.windows[index] = WMCreateArray(4); + WMAddToArray(w_global.shortcut.windows[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.shortcut.windows[shortcutNo]; snprintf(buffer, buflen, "%s %i", _("Set Shortcut"), shortcutNo + 1); -- 2.11.4.GIT