1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-04-24 17:41:26 +02:00

wmaker: Restore multi screen functionality by reverting wrong commits

Revert patches that moved variables from WMScreen to global level
because this broke X displays with multiple independent screens and
caused dock and clip icons to become mixed up. When managing multiple
screens each screen used to have it's own state/dock and clip. This
commit restores that by reverting mainly the commits listed below (and
those that are invalidated by reverting these) and fixing up later
commits to apply after the revert.

Reverted commits:
f60e65001b Moved 'workspace_name_font' from the Screen to a Workspace object in the global namespace
9e103a46e9 Variable workspace_count moved to the workspace object in the global namespace
e5ae684d02 Variable last_workspace moved to workspace object in global namespace
c610b8d7ce Variable current_workspace moved to workspace object in global namespace
f0c5073600 Array of workspaces moved to the workspace object in the global namespace
9c252988f8 Variable workspace_menu moved to workspace object in global namespace
e86b8dcb2f Clip, Dock and Drawers menu moved to appropriate global namespace
074092f319 Removed WScreen args not used
4a7daf2322 AppIcon list moved out of WScreen
2103fe390b Variable clip_icon moved to clip object in the global namespace
014bc52531 wClipIconPaint appicon argument removed
40e1ea08b8 Varible session_state moved to global namespace
6987d4aa40 Removed WScreen argument
0de3e590ce shortcutWindows moved to w_global
2e64831fb6 Removed unused variable wapp_list
b6423a7b4f wmaker: Moved variable Screen Count into the global namespace

Signed-off-by: Carlos R. Mafra <crmafra@gmail.com>
This commit is contained in:
BALATON Zoltan
2014-10-19 23:53:58 +02:00
committed by Carlos R. Mafra
parent e3dcadde30
commit cb3702559a
33 changed files with 588 additions and 572 deletions
+1 -41
View File
@@ -511,43 +511,12 @@ extern struct wmaker_global_variables {
/* Screens related */ /* Screens related */
int screen_count; int screen_count;
/* Workspace related */
struct {
struct WWorkspace **array; /* data for the workspaces */
int count; /* number of workspaces */
int current; /* current workspace number */
int last_used; /* last used workspace number */
WMFont *font_for_name; /* used during workspace switch */
/* /*
* Ignore Workspace Change: * Ignore Workspace Change:
* this variable is used to prevent workspace switch while certain * this variable is used to prevent workspace switch while certain
* operations are ongoing. * operations are ongoing.
*/ */
Bool ignore_change; Bool ignore_workspace_change;
/* Menus */
struct WMenu *menu; /* workspace operation */
struct WMenu *submenu; /* workspace list for window_menu */
} workspace;
/* Clip related */
struct {
struct WAppIcon *icon; /* The clip main icon, or the dock's, if they are merged */
struct WMenu *menu; /* Menu for clips */
struct WMenu *submenu; /* Workspace list for clips */
struct WMenu *opt_menu; /* Options for Clip */
struct WMenu *ws_menu; /* workspace menu for clip */
} clip;
/* Dock related */
struct {
struct WMenu *pos_menu; /* menu for position of the dock */
struct WMenu *drawer_menu; /* menu for the drawers */
} dock;
#ifdef HAVE_INOTIFY #ifdef HAVE_INOTIFY
struct { struct {
@@ -635,9 +604,6 @@ extern struct wmaker_global_variables {
int dummy; int dummy;
} xext; } xext;
/* Session related */
WMPropList *session_state;
/* Keyboard and shortcuts */ /* Keyboard and shortcuts */
struct { struct {
/* /*
@@ -645,13 +611,7 @@ extern struct wmaker_global_variables {
* impact the shortcuts (typically: CapsLock, NumLock, ScrollLock) * impact the shortcuts (typically: CapsLock, NumLock, ScrollLock)
*/ */
unsigned int modifiers_mask; unsigned int modifiers_mask;
WMArray *windows[MAX_WINDOW_SHORTCUTS];
} shortcut; } shortcut;
/* Application related */
struct WAppIcon *app_icon_list; /* list of all aplication icons */
} w_global; } w_global;
/****** Notifications ******/ /****** Notifications ******/
+28 -28
View File
@@ -611,8 +611,8 @@ static void find_Maximus_geometry(WWindow *wwin, WArea usableArea, int *new_x, i
/* The focused window is always the last in the list */ /* The focused window is always the last in the list */
while (tmp->prev) { while (tmp->prev) {
/* ignore windows in other workspaces etc */ /* ignore windows in other workspaces etc */
if (tmp->prev->frame->workspace != w_global.workspace.current || if (tmp->prev->frame->workspace != wwin->screen_ptr->current_workspace
tmp->prev->flags.miniaturized || tmp->prev->flags.hidden) { || tmp->prev->flags.miniaturized || tmp->prev->flags.hidden) {
tmp = tmp->prev; tmp = tmp->prev;
continue; continue;
} }
@@ -638,8 +638,8 @@ static void find_Maximus_geometry(WWindow *wwin, WArea usableArea, int *new_x, i
tmp = wwin; tmp = wwin;
while (tmp->prev) { while (tmp->prev) {
if (tmp->prev->frame->workspace != w_global.workspace.current || if (tmp->prev->frame->workspace != wwin->screen_ptr->current_workspace
tmp->prev->flags.miniaturized || tmp->prev->flags.hidden) { || tmp->prev->flags.miniaturized || tmp->prev->flags.hidden) {
tmp = tmp->prev; tmp = tmp->prev;
continue; continue;
} }
@@ -1105,7 +1105,7 @@ void wIconifyWindow(WWindow *wwin)
return; return;
} }
present = wwin->frame->workspace == w_global.workspace.current; present = wwin->frame->workspace == wwin->screen_ptr->current_workspace;
/* if the window is in another workspace, simplify process */ /* if the window is in another workspace, simplify process */
if (present) { if (present) {
@@ -1189,7 +1189,7 @@ void wIconifyWindow(WWindow *wwin)
wwin->flags.skip_next_animation = 0; wwin->flags.skip_next_animation = 0;
if (!wPreferences.disable_miniwindows && !wwin->flags.net_handle_icon) { if (!wPreferences.disable_miniwindows && !wwin->flags.net_handle_icon) {
if (w_global.workspace.current == wwin->frame->workspace || if (wwin->screen_ptr->current_workspace == wwin->frame->workspace ||
IS_OMNIPRESENT(wwin) || wPreferences.sticky_icons) IS_OMNIPRESENT(wwin) || wPreferences.sticky_icons)
XMapWindow(dpy, wwin->icon->core->window); XMapWindow(dpy, wwin->icon->core->window);
@@ -1251,17 +1251,17 @@ void wIconifyWindow(WWindow *wwin)
void wDeiconifyWindow(WWindow *wwin) void wDeiconifyWindow(WWindow *wwin)
{ {
/* Let's avoid changing workspace while deiconifying */ /* Let's avoid changing workspace while deiconifying */
w_global.workspace.ignore_change = True; w_global.ignore_workspace_change = True;
/* we're hiding for show_desktop */ /* we're hiding for show_desktop */
int netwm_hidden = wwin->flags.net_show_desktop && int netwm_hidden = wwin->flags.net_show_desktop &&
wwin->frame->workspace != w_global.workspace.current; wwin->frame->workspace != wwin->screen_ptr->current_workspace;
if (!netwm_hidden) if (!netwm_hidden)
wWindowChangeWorkspace(wwin, w_global.workspace.current); wWindowChangeWorkspace(wwin, wwin->screen_ptr->current_workspace);
if (!wwin->flags.miniaturized) { if (!wwin->flags.miniaturized) {
w_global.workspace.ignore_change = False; w_global.ignore_workspace_change = False;
return; return;
} }
@@ -1272,7 +1272,7 @@ void wDeiconifyWindow(WWindow *wwin)
wDeiconifyWindow(owner); wDeiconifyWindow(owner);
wSetFocusTo(wwin->screen_ptr, wwin); wSetFocusTo(wwin->screen_ptr, wwin);
wRaiseFrame(wwin->frame->core); wRaiseFrame(wwin->frame->core);
w_global.workspace.ignore_change = False; w_global.ignore_workspace_change = False;
return; return;
} }
} }
@@ -1339,7 +1339,7 @@ void wDeiconifyWindow(WWindow *wwin)
/* the window can disappear while ProcessPendingEvents() runs */ /* the window can disappear while ProcessPendingEvents() runs */
if (!wWindowFor(clientwin)) { if (!wWindowFor(clientwin)) {
w_global.workspace.ignore_change = False; w_global.ignore_workspace_change = False;
return; return;
} }
} }
@@ -1355,7 +1355,7 @@ void wDeiconifyWindow(WWindow *wwin)
if (!netwm_hidden) if (!netwm_hidden)
wUnshadeWindow(wwin); wUnshadeWindow(wwin);
w_global.workspace.ignore_change = False; w_global.ignore_workspace_change = False;
} }
static void hideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate) static void hideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate)
@@ -1428,7 +1428,7 @@ void wHideAll(WScreen *scr)
for (i = 0; i < wcount; i++) { for (i = 0; i < wcount; i++) {
wwin = windows[i]; wwin = windows[i];
if (wwin->frame->workspace == w_global.workspace.current if (wwin->frame->workspace == scr->current_workspace
&& !(wwin->flags.miniaturized || wwin->flags.hidden) && !(wwin->flags.miniaturized || wwin->flags.hidden)
&& !wwin->flags.internal_window && !wwin->flags.internal_window
&& !WFLAGP(wwin, no_miniaturizable) && !WFLAGP(wwin, no_miniaturizable)
@@ -1452,7 +1452,7 @@ void wHideOtherApplications(WWindow *awin)
while (wwin) { while (wwin) {
if (wwin != awin if (wwin != awin
&& wwin->frame->workspace == w_global.workspace.current && wwin->frame->workspace == awin->screen_ptr->current_workspace
&& !(wwin->flags.miniaturized || wwin->flags.hidden) && !(wwin->flags.miniaturized || wwin->flags.hidden)
&& !wwin->flags.internal_window && !wwin->flags.internal_window
&& wGetWindowOfInspectorForWindow(wwin) != awin && !WFLAGP(wwin, no_hide_others)) { && wGetWindowOfInspectorForWindow(wwin) != awin && !WFLAGP(wwin, no_hide_others)) {
@@ -1554,7 +1554,7 @@ void wHideApplication(WApplication *wapp)
static void unhideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate, int bringToCurrentWS) static void unhideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int animate, int bringToCurrentWS)
{ {
if (bringToCurrentWS) if (bringToCurrentWS)
wWindowChangeWorkspace(wwin, w_global.workspace.current); wWindowChangeWorkspace(wwin, wwin->screen_ptr->current_workspace);
wwin->flags.hidden = 0; wwin->flags.hidden = 0;
@@ -1567,7 +1567,7 @@ static void unhideWindow(WIcon *icon, int icon_x, int icon_y, WWindow *wwin, int
} }
#endif #endif
wwin->flags.skip_next_animation = 0; wwin->flags.skip_next_animation = 0;
if (w_global.workspace.current == wwin->frame->workspace) { if (wwin->screen_ptr->current_workspace == wwin->frame->workspace) {
XMapWindow(dpy, wwin->client_win); XMapWindow(dpy, wwin->client_win);
XMapWindow(dpy, wwin->frame->core->window); XMapWindow(dpy, wwin->frame->core->window);
wClientSetState(wwin, NormalState, None); wClientSetState(wwin, NormalState, None);
@@ -1612,7 +1612,7 @@ void wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurren
if (wlist->flags.miniaturized) { if (wlist->flags.miniaturized) {
if ((bringToCurrentWS || wPreferences.sticky_icons || if ((bringToCurrentWS || wPreferences.sticky_icons ||
wlist->frame->workspace == w_global.workspace.current) && wlist->icon) { wlist->frame->workspace == scr->current_workspace) && wlist->icon) {
if (!wlist->icon->mapped) { if (!wlist->icon->mapped) {
int x, y; int x, y;
@@ -1627,17 +1627,17 @@ void wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurren
wRaiseFrame(wlist->icon->core); wRaiseFrame(wlist->icon->core);
} }
if (bringToCurrentWS) if (bringToCurrentWS)
wWindowChangeWorkspace(wlist, w_global.workspace.current); wWindowChangeWorkspace(wlist, scr->current_workspace);
wlist->flags.hidden = 0; wlist->flags.hidden = 0;
if (miniwindows && wlist->frame->workspace == w_global.workspace.current) if (miniwindows && wlist->frame->workspace == scr->current_workspace)
wDeiconifyWindow(wlist); wDeiconifyWindow(wlist);
WMPostNotificationName(WMNChangedState, wlist, "hide"); WMPostNotificationName(WMNChangedState, wlist, "hide");
} else if (wlist->flags.shaded) { } else if (wlist->flags.shaded) {
if (bringToCurrentWS) if (bringToCurrentWS)
wWindowChangeWorkspace(wlist, w_global.workspace.current); wWindowChangeWorkspace(wlist, scr->current_workspace);
wlist->flags.hidden = 0; wlist->flags.hidden = 0;
wRaiseFrame(wlist->frame->core); wRaiseFrame(wlist->frame->core);
if (wlist->frame->workspace == w_global.workspace.current) { if (wlist->frame->workspace == scr->current_workspace) {
XMapWindow(dpy, wlist->frame->core->window); XMapWindow(dpy, wlist->frame->core->window);
if (miniwindows) if (miniwindows)
wUnshadeWindow(wlist); wUnshadeWindow(wlist);
@@ -1648,8 +1648,8 @@ void wUnhideApplication(WApplication *wapp, Bool miniwindows, Bool bringToCurren
wapp->app_icon->y_pos, wlist, animate, bringToCurrentWS); wapp->app_icon->y_pos, wlist, animate, bringToCurrentWS);
animate = False; animate = False;
} else { } else {
if (bringToCurrentWS && wlist->frame->workspace != w_global.workspace.current) if (bringToCurrentWS && wlist->frame->workspace != scr->current_workspace)
wWindowChangeWorkspace(wlist, w_global.workspace.current); wWindowChangeWorkspace(wlist, scr->current_workspace);
wRaiseFrame(wlist->frame->core); wRaiseFrame(wlist->frame->core);
} }
@@ -1683,7 +1683,7 @@ void wShowAllWindows(WScreen *scr)
old_foc = wwin = scr->focused_window; old_foc = wwin = scr->focused_window;
while (wwin) { while (wwin) {
if (!wwin->flags.internal_window && if (!wwin->flags.internal_window &&
(w_global.workspace.current == wwin->frame->workspace || IS_OMNIPRESENT(wwin))) { (scr->current_workspace == wwin->frame->workspace || IS_OMNIPRESENT(wwin))) {
if (wwin->flags.miniaturized) { if (wwin->flags.miniaturized) {
wwin->flags.skip_next_animation = 1; wwin->flags.skip_next_animation = 1;
wDeiconifyWindow(wwin); wDeiconifyWindow(wwin);
@@ -1802,7 +1802,7 @@ void wArrangeIcons(WScreen *scr, Bool arrangeAll)
: vars[head].yo + vars[head].ys*(vars[head].si*isize)) : vars[head].yo + vars[head].ys*(vars[head].si*isize))
/* arrange application icons */ /* arrange application icons */
aicon = w_global.app_icon_list; aicon = scr->app_icon_list;
/* reverse them to avoid unnecessarily sliding of icons */ /* reverse them to avoid unnecessarily sliding of icons */
while (aicon && aicon->next) while (aicon && aicon->next)
aicon = aicon->next; aicon = aicon->next;
@@ -1838,7 +1838,7 @@ void wArrangeIcons(WScreen *scr, Bool arrangeAll)
while (wwin) { while (wwin) {
if (wwin->icon && wwin->flags.miniaturized && !wwin->flags.hidden && if (wwin->icon && wwin->flags.miniaturized && !wwin->flags.hidden &&
(wwin->frame->workspace == w_global.workspace.current || (wwin->frame->workspace == scr->current_workspace ||
IS_OMNIPRESENT(wwin) || wPreferences.sticky_icons)) { IS_OMNIPRESENT(wwin) || wPreferences.sticky_icons)) {
head = wGetHeadForWindow(wwin); head = wGetHeadForWindow(wwin);
@@ -1907,7 +1907,7 @@ void wSelectWindow(WWindow *wwin, Bool flag)
void wMakeWindowVisible(WWindow *wwin) void wMakeWindowVisible(WWindow *wwin)
{ {
if (wwin->frame->workspace != w_global.workspace.current) if (wwin->frame->workspace != wwin->screen_ptr->current_workspace)
wWorkspaceChange(wwin->screen_ptr, wwin->frame->workspace); wWorkspaceChange(wwin->screen_ptr, wwin->frame->workspace);
if (wwin->flags.shaded) if (wwin->flags.shaded)
+31 -29
View File
@@ -67,8 +67,8 @@ static void iconDblClick(WObjDescriptor * desc, XEvent * event);
static void iconExpose(WObjDescriptor * desc, XEvent * event); static void iconExpose(WObjDescriptor * desc, XEvent * event);
static void wApplicationSaveIconPathFor(const char *iconPath, const char *wm_instance, const char *wm_class); static void wApplicationSaveIconPathFor(const char *iconPath, const char *wm_instance, const char *wm_class);
static WAppIcon *wAppIconCreate(WWindow * leader_win); static WAppIcon *wAppIconCreate(WWindow * leader_win);
static void add_to_appicon_list(WAppIcon *appicon); static void add_to_appicon_list(WScreen *scr, WAppIcon *appicon);
static void remove_from_appicon_list(WAppIcon *appicon); static void remove_from_appicon_list(WScreen *scr, WAppIcon *appicon);
static void create_appicon_from_dock(WWindow *wwin, WApplication *wapp, Window main_window); static void create_appicon_from_dock(WWindow *wwin, WApplication *wapp, Window main_window);
/* This function is used if the application is a .app. It checks if it has an icon in it /* This function is used if the application is a .app. It checks if it has an icon in it
@@ -115,7 +115,7 @@ WAppIcon *wAppIconCreateForDock(WScreen *scr, const char *command, const char *w
aicon->yindex = -1; aicon->yindex = -1;
aicon->xindex = -1; aicon->xindex = -1;
add_to_appicon_list(aicon); add_to_appicon_list(scr, aicon);
if (command) if (command)
aicon->command = wstrdup(command); aicon->command = wstrdup(command);
@@ -180,7 +180,7 @@ void unpaint_app_icon(WApplication *wapp)
return; return;
scr = wapp->main_window_desc->screen_ptr; scr = wapp->main_window_desc->screen_ptr;
clip = w_global.workspace.array[w_global.workspace.current]->clip; clip = scr->workspaces[scr->current_workspace]->clip;
if (!clip || !aicon->attracted || !clip->collapsed) if (!clip || !aicon->attracted || !clip->collapsed)
XUnmapWindow(dpy, aicon->icon->core->window); XUnmapWindow(dpy, aicon->icon->core->window);
@@ -188,7 +188,7 @@ void unpaint_app_icon(WApplication *wapp)
/* We want to avoid having it on the list because otherwise /* We want to avoid having it on the list because otherwise
* there will be a hole when the icons are arranged with * there will be a hole when the icons are arranged with
* wArrangeIcons() */ * wArrangeIcons() */
remove_from_appicon_list(aicon); remove_from_appicon_list(scr, aicon);
if (wPreferences.auto_arrange_icons && !aicon->attracted) if (wPreferences.auto_arrange_icons && !aicon->attracted)
wArrangeIcons(scr, True); wArrangeIcons(scr, True);
@@ -215,7 +215,7 @@ void paint_app_icon(WApplication *wapp)
attracting_dock = scr->attracting_drawer != NULL ? attracting_dock = scr->attracting_drawer != NULL ?
scr->attracting_drawer : scr->attracting_drawer :
w_global.workspace.array[w_global.workspace.current]->clip; scr->workspaces[scr->current_workspace]->clip;
if (attracting_dock && attracting_dock->attract_icons && if (attracting_dock && attracting_dock->attract_icons &&
wDockFindFreeSlot(attracting_dock, &x, &y)) { wDockFindFreeSlot(attracting_dock, &x, &y)) {
wapp->app_icon->attracted = 1; wapp->app_icon->attracted = 1;
@@ -240,7 +240,7 @@ void paint_app_icon(WApplication *wapp)
* having it on the list */ * having it on the list */
if (!WFLAGP(wapp->main_window_desc, no_appicon) && if (!WFLAGP(wapp->main_window_desc, no_appicon) &&
wapp->app_icon->next == NULL && wapp->app_icon->prev == NULL) wapp->app_icon->next == NULL && wapp->app_icon->prev == NULL)
add_to_appicon_list(wapp->app_icon); add_to_appicon_list(scr, wapp->app_icon);
if (!attracting_dock || !wapp->app_icon->attracted || !attracting_dock->collapsed) if (!attracting_dock || !wapp->app_icon->attracted || !attracting_dock->collapsed)
XMapWindow(dpy, icon->core->window); XMapWindow(dpy, icon->core->window);
@@ -324,8 +324,10 @@ static WAppIcon *wAppIconCreate(WWindow *leader_win)
return aicon; return aicon;
} }
void wAppIconDestroy(WAppIcon *aicon) void wAppIconDestroy(WAppIcon * aicon)
{ {
WScreen *scr = aicon->icon->core->screen_ptr;
RemoveFromStackList(aicon->icon->core); RemoveFromStackList(aicon->icon->core);
wIconDestroy(aicon->icon); wIconDestroy(aicon->icon);
if (aicon->command) if (aicon->command)
@@ -340,7 +342,7 @@ void wAppIconDestroy(WAppIcon *aicon)
if (aicon->wm_class) if (aicon->wm_class)
wfree(aicon->wm_class); wfree(aicon->wm_class);
remove_from_appicon_list(aicon); remove_from_appicon_list(scr, aicon);
aicon->destroyed = 1; aicon->destroyed = 1;
wrelease(aicon); wrelease(aicon);
@@ -378,7 +380,7 @@ static void updateDockNumbers(WScreen *scr)
WAppIcon *dicon = scr->dock->icon_array[0]; WAppIcon *dicon = scr->dock->icon_array[0];
ws_numbers = wmalloc(20); ws_numbers = wmalloc(20);
snprintf(ws_numbers, 20, "%i [ %i ]", w_global.workspace.current + 1, ((w_global.workspace.current / 10) + 1)); snprintf(ws_numbers, 20, "%i [ %i ]", scr->current_workspace + 1, ((scr->current_workspace / 10) + 1));
length = strlen(ws_numbers); length = strlen(ws_numbers);
XClearArea(dpy, dicon->icon->core->window, 2, 2, 50, WMFontHeight(scr->icon_title_font) + 1, False); XClearArea(dpy, dicon->icon->core->window, 2, 2, 50, WMFontHeight(scr->icon_title_font) + 1, False);
@@ -674,7 +676,7 @@ static void iconDblClick(WObjDescriptor *desc, XEvent *event)
unhideHere = (event->xbutton.state & ShiftMask); unhideHere = (event->xbutton.state & ShiftMask);
/* go to the last workspace that the user worked on the app */ /* go to the last workspace that the user worked on the app */
if (!unhideHere && wapp->last_workspace != w_global.workspace.current) if (!unhideHere && wapp->last_workspace != scr->current_workspace)
wWorkspaceChange(scr, wapp->last_workspace); wWorkspaceChange(scr, wapp->last_workspace);
wUnhideApplication(wapp, event->xbutton.button == Button2, unhideHere); wUnhideApplication(wapp, event->xbutton.button == Button2, unhideHere);
@@ -816,8 +818,8 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
allDocks[ i++ ] = scr->dock; allDocks[ i++ ] = scr->dock;
if (!wPreferences.flags.noclip && if (!wPreferences.flags.noclip &&
originalDock != w_global.workspace.array[w_global.workspace.current]->clip) originalDock != scr->workspaces[scr->current_workspace]->clip)
allDocks[i++] = w_global.workspace.array[w_global.workspace.current]->clip; allDocks[ i++ ] = scr->workspaces[scr->current_workspace]->clip;
for ( ; i < scr->drawer_count + 2; i++) /* In case the clip, the dock, or both, are disabled */ for ( ; i < scr->drawer_count + 2; i++) /* In case the clip, the dock, or both, are disabled */
allDocks[ i ] = NULL; allDocks[ i ] = NULL;
@@ -868,11 +870,11 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
if (omnipresent && !showed_all_clips) { if (omnipresent && !showed_all_clips) {
int i; int i;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (i == w_global.workspace.current) if (i == scr->current_workspace)
continue; continue;
wDockShowIcons(w_global.workspace.array[i]->clip); wDockShowIcons(scr->workspaces[i]->clip);
/* Note: if dock is collapsed (for instance, because it /* Note: if dock is collapsed (for instance, because it
auto-collapses), its icons still won't show up */ auto-collapses), its icons still won't show up */
} }
@@ -1074,11 +1076,11 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
} }
if (showed_all_clips) { if (showed_all_clips) {
int i; int i;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (i == w_global.workspace.current) if (i == scr->current_workspace)
continue; continue;
wDockHideIcons(w_global.workspace.array[i]->clip); wDockHideIcons(scr->workspaces[i]->clip);
} }
} }
if (wPreferences.auto_arrange_icons && !(originalDock != NULL && docked)) if (wPreferences.auto_arrange_icons && !(originalDock != NULL && docked))
@@ -1156,8 +1158,8 @@ static void create_appicon_from_dock(WWindow *wwin, WApplication *wapp, Window m
/* check clips */ /* check clips */
if (!wapp->app_icon) { if (!wapp->app_icon) {
int i; int i;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
WDock *dock = w_global.workspace.array[i]->clip; WDock *dock = scr->workspaces[i]->clip;
if (dock) if (dock)
wapp->app_icon = findDockIconFor(dock, main_window); wapp->app_icon = findDockIconFor(dock, main_window);
@@ -1196,23 +1198,23 @@ static void create_appicon_from_dock(WWindow *wwin, WApplication *wapp, Window m
} }
/* Add the appicon to the appiconlist */ /* Add the appicon to the appiconlist */
static void add_to_appicon_list(WAppIcon *appicon) static void add_to_appicon_list(WScreen *scr, WAppIcon *appicon)
{ {
appicon->prev = NULL; appicon->prev = NULL;
appicon->next = w_global.app_icon_list; appicon->next = scr->app_icon_list;
if (w_global.app_icon_list) if (scr->app_icon_list)
w_global.app_icon_list->prev = appicon; scr->app_icon_list->prev = appicon;
w_global.app_icon_list = appicon; scr->app_icon_list = appicon;
} }
/* Remove the appicon from the appiconlist */ /* Remove the appicon from the appiconlist */
static void remove_from_appicon_list(WAppIcon *appicon) static void remove_from_appicon_list(WScreen *scr, WAppIcon *appicon)
{ {
if (appicon == w_global.app_icon_list) { if (appicon == scr->app_icon_list) {
if (appicon->next) if (appicon->next)
appicon->next->prev = NULL; appicon->next->prev = NULL;
w_global.app_icon_list = appicon->next; scr->app_icon_list = appicon->next;
} else { } else {
if (appicon->next) if (appicon->next)
appicon->next->prev = appicon->prev; appicon->next->prev = appicon->prev;
+9
View File
@@ -146,6 +146,7 @@ WApplication *wApplicationCreate(WWindow * wwin)
void wApplicationDestroy(WApplication *wapp) void wApplicationDestroy(WApplication *wapp)
{ {
WWindow *wwin; WWindow *wwin;
WScreen *scr;
if (!wapp) if (!wapp)
return; return;
@@ -165,10 +166,18 @@ void wApplicationDestroy(WApplication *wapp)
return; return;
} }
scr = wapp->main_window_desc->screen_ptr;
if (wapp == scr->wapp_list) {
if (wapp->next)
wapp->next->prev = NULL;
scr->wapp_list = wapp->next;
} else {
if (wapp->next) if (wapp->next)
wapp->next->prev = wapp->prev; wapp->next->prev = wapp->prev;
if (wapp->prev) if (wapp->prev)
wapp->prev->next = wapp->next; wapp->prev->next = wapp->next;
}
XDeleteContext(dpy, wapp->main_window, w_global.context.app_win); XDeleteContext(dpy, wapp->main_window, w_global.context.app_win);
wAppMenuDestroy(wapp->menu); wAppMenuDestroy(wapp->menu);
+3 -3
View File
@@ -511,9 +511,9 @@ static void appiconBalloon(WObjDescriptor *object)
char *tmp; char *tmp;
/* Show balloon if it is the Clip and the workspace name is > 5 chars */ /* Show balloon if it is the Clip and the workspace name is > 5 chars */
if (object->parent == w_global.clip.icon) { if (object->parent == scr->clip_icon) {
if (strlen(w_global.workspace.array[w_global.workspace.current]->name) > 5) { if (strlen(scr->workspaces[scr->current_workspace]->name) > 5) {
scr->balloon->text = wstrdup(w_global.workspace.array[w_global.workspace.current]->name); scr->balloon->text = wstrdup(scr->workspaces[scr->current_workspace]->name);
} else { } else {
wBalloonHide(scr); wBalloonHide(scr);
return; return;
+1 -1
View File
@@ -131,7 +131,7 @@ void StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next, Bool class_only)
oldFocused = change_focus_and_raise(newFocused, oldFocused, swpanel, scr, False); oldFocused = change_focus_and_raise(newFocused, oldFocused, swpanel, scr, False);
} else { } else {
if (wwin->frame->workspace == w_global.workspace.current) if (wwin->frame->workspace == scr->current_workspace)
newFocused = wwin; newFocused = wwin;
else else
newFocused = NULL; newFocused = NULL;
+16 -16
View File
@@ -1229,21 +1229,21 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict)
WMPostNotificationName(WNIconTileSettingsChanged, NULL, NULL); WMPostNotificationName(WNIconTileSettingsChanged, NULL, NULL);
if (needs_refresh & REFRESH_WORKSPACE_MENU) { if (needs_refresh & REFRESH_WORKSPACE_MENU) {
if (w_global.workspace.menu) if (scr->workspace_menu)
wWorkspaceMenuUpdate(w_global.workspace.menu); wWorkspaceMenuUpdate(scr, scr->workspace_menu);
if (w_global.clip.ws_menu) if (scr->clip_ws_menu)
wWorkspaceMenuUpdate(w_global.clip.ws_menu); wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
if (w_global.workspace.submenu) if (scr->workspace_submenu)
w_global.workspace.submenu->flags.realized = 0; scr->workspace_submenu->flags.realized = 0;
if (w_global.clip.submenu) if (scr->clip_submenu)
w_global.clip.submenu->flags.realized = 0; scr->clip_submenu->flags.realized = 0;
} }
} }
} }
void wDefaultUpdateIcons(WScreen *scr) void wDefaultUpdateIcons(WScreen *scr)
{ {
WAppIcon *aicon = w_global.app_icon_list; WAppIcon *aicon = scr->app_icon_list;
WDrawerChain *dc; WDrawerChain *dc;
WWindow *wwin = scr->focused_window; WWindow *wwin = scr->focused_window;
@@ -1255,7 +1255,7 @@ void wDefaultUpdateIcons(WScreen *scr)
} }
if (!wPreferences.flags.noclip || wPreferences.flags.clip_merged_in_dock) if (!wPreferences.flags.noclip || wPreferences.flags.clip_merged_in_dock)
wClipIconPaint(); wClipIconPaint(scr->clip_icon);
for (dc = scr->drawers; dc != NULL; dc = dc->next) for (dc = scr->drawers; dc != NULL; dc = dc->next)
wDrawerIconPaint(dc->adrawer->icon_array[0]); wDrawerIconPaint(dc->adrawer->icon_array[0]);
@@ -2546,8 +2546,8 @@ static int setStickyIcons(WScreen * scr, WDefaultEntry * entry, void *bar, void
(void) bar; (void) bar;
(void) foo; (void) foo;
if (w_global.workspace.array) { if (scr->workspaces) {
wWorkspaceForceChange(scr, w_global.workspace.current); wWorkspaceForceChange(scr, scr->current_workspace);
wArrangeIcons(scr, False); wArrangeIcons(scr, False);
} }
return 0; return 0;
@@ -2710,10 +2710,10 @@ static int setLargeDisplayFont(WScreen *scr, WDefaultEntry *entry, void *tdata,
(void) entry; (void) entry;
(void) foo; (void) foo;
if (w_global.workspace.font_for_name) if (scr->workspace_name_font)
WMReleaseFont(w_global.workspace.font_for_name); WMReleaseFont(scr->workspace_name_font);
w_global.workspace.font_for_name = font; scr->workspace_name_font = font;
return 0; return 0;
} }
@@ -3082,7 +3082,7 @@ static int setWorkspaceBack(WScreen * scr, WDefaultEntry * entry, void *tdata, v
if (str) { if (str) {
SendHelperMessage(scr, 'S', 0, str); SendHelperMessage(scr, 'S', 0, str);
wfree(str); wfree(str);
SendHelperMessage(scr, 'C', w_global.workspace.current + 1, NULL); SendHelperMessage(scr, 'C', scr->current_workspace + 1, NULL);
} else { } else {
SendHelperMessage(scr, 'U', 0, NULL); SendHelperMessage(scr, 'U', 0, NULL);
} }
+1 -1
View File
@@ -51,7 +51,7 @@ char *get_icon_filename(const char *winstance, const char *wclass, const char *c
Bool default_icon); Bool default_icon);
int wDefaultGetStartWorkspace(const char *instance, const char *class); int wDefaultGetStartWorkspace(WScreen *scr, const char *instance, const char *class);
void wDefaultChangeIcon(const char *instance, const char* class, const char *file); void wDefaultChangeIcon(const char *instance, const char* class, const char *file);
RImage *get_rimage_from_file(WScreen *scr, const char *file_name, int max_size); RImage *get_rimage_from_file(WScreen *scr, const char *file_name, int max_size);
+101 -97
View File
@@ -174,9 +174,9 @@ static void renameCallback(WMenu *menu, WMenuEntry *entry)
assert(entry->clientdata != NULL); assert(entry->clientdata != NULL);
wspace = w_global.workspace.current; wspace = dock->screen_ptr->current_workspace;
name = wstrdup(w_global.workspace.array[wspace]->name); name = wstrdup(dock->screen_ptr->workspaces[wspace]->name);
snprintf(buffer, sizeof(buffer), _("Type the name for workspace %i:"), wspace + 1); snprintf(buffer, sizeof(buffer), _("Type the name for workspace %i:"), wspace + 1);
if (wInputDialog(dock->screen_ptr, _("Rename Workspace"), buffer, &name)) if (wInputDialog(dock->screen_ptr, _("Rename Workspace"), buffer, &name))
@@ -539,7 +539,7 @@ static void keepIconsCallback(WMenu *menu, WMenuEntry *entry)
selectedIcons = getSelected(dock); selectedIcons = getSelected(dock);
if (!WMGetArrayItemCount(selectedIcons) if (!WMGetArrayItemCount(selectedIcons)
&& clickedIcon != w_global.clip.icon) { && clickedIcon != dock->screen_ptr->clip_icon) {
char *command = NULL; char *command = NULL;
if (!clickedIcon->command && !clickedIcon->editing) { if (!clickedIcon->command && !clickedIcon->editing) {
@@ -608,8 +608,8 @@ static void toggleAutoAttractCallback(WMenu *menu, WMenuEntry *entry)
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
int i; int i;
for (i = 0; i < w_global.workspace.count; i++) for (i = 0; i < scr->workspace_count; i++)
w_global.workspace.array[i]->clip->attract_icons = False; scr->workspaces[ i ]->clip->attract_icons = False;
/* dock menu will be updated later, when opened */ /* dock menu will be updated later, when opened */
} }
@@ -653,7 +653,7 @@ static void attractIconsCallback(WMenu *menu, WMenuEntry *entry)
assert(entry->clientdata != NULL); assert(entry->clientdata != NULL);
clip = clickedIcon->dock; clip = clickedIcon->dock;
aicon = w_global.app_icon_list; aicon = clip->screen_ptr->app_icon_list;
while (aicon) { while (aicon) {
if (!aicon->docked && wDockFindFreeSlot(clip, &x, &y)) { if (!aicon->docked && wDockFindFreeSlot(clip, &x, &y)) {
@@ -824,8 +824,8 @@ static WAppIcon *mainIconCreate(WScreen *scr, int type, const char *name)
switch(type) { switch(type) {
case WM_CLIP: case WM_CLIP:
if (w_global.clip.icon) if (scr->clip_icon)
return w_global.clip.icon; return scr->clip_icon;
btn = wAppIconCreateForDock(scr, NULL, "Logo", "WMClip", TILE_CLIP); btn = wAppIconCreateForDock(scr, NULL, "Logo", "WMClip", TILE_CLIP);
btn->icon->core->descriptor.handle_expose = clipIconExpose; btn->icon->core->descriptor.handle_expose = clipIconExpose;
@@ -860,7 +860,7 @@ static WAppIcon *mainIconCreate(WScreen *scr, int type, const char *name)
btn->docked = 1; btn->docked = 1;
if (type == WM_CLIP || if (type == WM_CLIP ||
(type == WM_DOCK && wPreferences.flags.clip_merged_in_dock)) (type == WM_DOCK && wPreferences.flags.clip_merged_in_dock))
w_global.clip.icon = btn; scr->clip_icon = btn;
return btn; return btn;
} }
@@ -868,6 +868,7 @@ static WAppIcon *mainIconCreate(WScreen *scr, int type, const char *name)
static void switchWSCommand(WMenu *menu, WMenuEntry *entry) static void switchWSCommand(WMenu *menu, WMenuEntry *entry)
{ {
WAppIcon *btn, *icon = (WAppIcon *) entry->clientdata; WAppIcon *btn, *icon = (WAppIcon *) entry->clientdata;
WScreen *scr = icon->icon->core->screen_ptr;
WDock *src, *dest; WDock *src, *dest;
WMArray *selectedIcons; WMArray *selectedIcons;
int x, y; int x, y;
@@ -875,10 +876,11 @@ static void switchWSCommand(WMenu *menu, WMenuEntry *entry)
/* Parameter not used, but tell the compiler that it is ok */ /* Parameter not used, but tell the compiler that it is ok */
(void) menu; (void) menu;
if (entry->order == w_global.workspace.current) if (entry->order == scr->current_workspace)
return; return;
src = icon->dock; src = icon->dock;
dest = w_global.workspace.array[entry->order]->clip; dest = scr->workspaces[entry->order]->clip;
selectedIcons = getSelected(src); selectedIcons = getSelected(src);
@@ -891,7 +893,7 @@ static void switchWSCommand(WMenu *menu, WMenuEntry *entry)
XUnmapWindow(dpy, btn->icon->core->window); XUnmapWindow(dpy, btn->icon->core->window);
} }
} }
} else if (icon != w_global.clip.icon) { } else if (icon != scr->clip_icon) {
if (wDockFindFreeSlot(dest, &x, &y)) { if (wDockFindFreeSlot(dest, &x, &y)) {
wDockMoveIconBetweenDocks(src, dest, icon, x, y); wDockMoveIconBetweenDocks(src, dest, icon, x, y);
XUnmapWindow(dpy, icon->icon->core->window); XUnmapWindow(dpy, icon->icon->core->window);
@@ -945,30 +947,31 @@ static void launchDockedApplication(WAppIcon *btn, Bool withSelection)
static void updateWorkspaceMenu(WMenu *menu, WAppIcon *icon) static void updateWorkspaceMenu(WMenu *menu, WAppIcon *icon)
{ {
WScreen *scr = menu->frame->screen_ptr;
char title[MAX_WORKSPACENAME_WIDTH + 1]; char title[MAX_WORKSPACENAME_WIDTH + 1];
int i; int i;
if (!menu || !icon) if (!menu || !icon)
return; return;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (i < menu->entry_no) { if (i < menu->entry_no) {
if (strcmp(menu->entries[i]->text, w_global.workspace.array[i]->name) != 0) { if (strcmp(menu->entries[i]->text, scr->workspaces[i]->name) != 0) {
wfree(menu->entries[i]->text); wfree(menu->entries[i]->text);
strcpy(title, w_global.workspace.array[i]->name); strcpy(title, scr->workspaces[i]->name);
menu->entries[i]->text = wstrdup(title); menu->entries[i]->text = wstrdup(title);
menu->flags.realized = 0; menu->flags.realized = 0;
} }
menu->entries[i]->clientdata = (void *)icon; menu->entries[i]->clientdata = (void *)icon;
} else { } else {
strcpy(title, w_global.workspace.array[i]->name); strcpy(title, scr->workspaces[i]->name);
wMenuAddCallback(menu, title, switchWSCommand, (void *)icon); wMenuAddCallback(menu, title, switchWSCommand, (void *)icon);
menu->flags.realized = 0; menu->flags.realized = 0;
} }
if (i == w_global.workspace.current) if (i == scr->current_workspace)
wMenuSetEnabled(menu, i, False); wMenuSetEnabled(menu, i, False);
else else
wMenuSetEnabled(menu, i, True); wMenuSetEnabled(menu, i, True);
@@ -986,7 +989,7 @@ static WMenu *makeWorkspaceMenu(WScreen *scr)
if (!menu) if (!menu)
wwarning(_("could not create workspace submenu for Clip menu")); wwarning(_("could not create workspace submenu for Clip menu"));
wMenuAddCallback(menu, "", switchWSCommand, (void *)w_global.clip.icon); wMenuAddCallback(menu, "", switchWSCommand, (void *)scr->clip_icon);
menu->flags.realized = 0; menu->flags.realized = 0;
wMenuRealize(menu); wMenuRealize(menu);
@@ -1208,18 +1211,18 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
WMenu *menu; WMenu *menu;
WMenuEntry *entry; WMenuEntry *entry;
if (type == WM_CLIP && w_global.clip.menu) if (type == WM_CLIP && scr->clip_menu)
return w_global.clip.menu; return scr->clip_menu;
if (type == WM_DRAWER && w_global.dock.drawer_menu) if (type == WM_DRAWER && scr->drawer_menu)
return w_global.dock.drawer_menu; return scr->drawer_menu;
menu = wMenuCreate(scr, NULL, False); menu = wMenuCreate(scr, NULL, False);
if (type == WM_DOCK) { if (type == WM_DOCK) {
entry = wMenuAddCallback(menu, _("Dock position"), NULL, NULL); entry = wMenuAddCallback(menu, _("Dock position"), NULL, NULL);
if (w_global.dock.pos_menu == NULL) if (scr->dock_pos_menu == NULL)
w_global.dock.pos_menu = makeDockPositionMenu(scr); scr->dock_pos_menu = makeDockPositionMenu(scr);
wMenuEntrySetCascade(menu, entry, w_global.dock.pos_menu); wMenuEntrySetCascade(menu, entry, scr->dock_pos_menu);
if (!wPreferences.flags.nodrawer) { if (!wPreferences.flags.nodrawer) {
entry = wMenuAddCallback(menu, _("Add a drawer"), addADrawerCallback, NULL); entry = wMenuAddCallback(menu, _("Add a drawer"), addADrawerCallback, NULL);
@@ -1230,10 +1233,10 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
else /* if (type == WM_DRAWER) */ else /* if (type == WM_DRAWER) */
entry = wMenuAddCallback(menu, _("Drawer options"), NULL, NULL); entry = wMenuAddCallback(menu, _("Drawer options"), NULL, NULL);
if (w_global.clip.opt_menu == NULL) if (scr->clip_options == NULL)
w_global.clip.opt_menu = makeClipOptionsMenu(scr); scr->clip_options = makeClipOptionsMenu(scr);
wMenuEntrySetCascade(menu, entry, w_global.clip.opt_menu); wMenuEntrySetCascade(menu, entry, scr->clip_options);
/* The same menu is used for the dock and its appicons. If the menu /* The same menu is used for the dock and its appicons. If the menu
* entry text is different between the two contexts, or if it can * entry text is different between the two contexts, or if it can
@@ -1262,9 +1265,9 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
entry = wMenuAddCallback(menu, _("Move Icon To"), NULL, NULL); entry = wMenuAddCallback(menu, _("Move Icon To"), NULL, NULL);
wfree(entry->text); wfree(entry->text);
entry->text = _("Move Icon To"); /* can be: Move Icons to */ entry->text = _("Move Icon To"); /* can be: Move Icons to */
w_global.clip.submenu = makeWorkspaceMenu(scr); scr->clip_submenu = makeWorkspaceMenu(scr);
if (w_global.clip.submenu) if (scr->clip_submenu)
wMenuEntrySetCascade(menu, entry, w_global.clip.submenu); wMenuEntrySetCascade(menu, entry, scr->clip_submenu);
} }
entry = wMenuAddCallback(menu, _("Remove Icon"), removeIconsCallback, NULL); entry = wMenuAddCallback(menu, _("Remove Icon"), removeIconsCallback, NULL);
@@ -1289,10 +1292,10 @@ static WMenu *dockMenuCreate(WScreen *scr, int type)
entry->text = _("Kill"); /* can be: Remove drawer */ entry->text = _("Kill"); /* can be: Remove drawer */
if (type == WM_CLIP) if (type == WM_CLIP)
w_global.clip.menu = menu; scr->clip_menu = menu;
if (type == WM_DRAWER) if (type == WM_DRAWER)
w_global.dock.drawer_menu = menu; scr->drawer_menu = menu;
return menu; return menu;
} }
@@ -1386,11 +1389,10 @@ void wDockDestroy(WDock *dock)
wfree(dock); wfree(dock);
} }
void wClipIconPaint(void) void wClipIconPaint(WAppIcon *aicon)
{ {
WAppIcon *aicon = w_global.clip.icon;
WScreen *scr = aicon->icon->core->screen_ptr; WScreen *scr = aicon->icon->core->screen_ptr;
WWorkspace *workspace = w_global.workspace.array[w_global.workspace.current]; WWorkspace *workspace = scr->workspaces[scr->current_workspace];
WMColor *color; WMColor *color;
Window win = aicon->icon->core->window; Window win = aicon->icon->core->window;
int length, nlength; int length, nlength;
@@ -1402,7 +1404,7 @@ void wClipIconPaint(void)
length = strlen(workspace->name); length = strlen(workspace->name);
ws_name = wmalloc(length + 1); ws_name = wmalloc(length + 1);
snprintf(ws_name, length + 1, "%s", workspace->name); snprintf(ws_name, length + 1, "%s", workspace->name);
snprintf(ws_number, sizeof(ws_number), "%i", w_global.workspace.current + 1); snprintf(ws_number, sizeof(ws_number), "%i", scr->current_workspace + 1);
nlength = strlen(ws_number); nlength = strlen(ws_number);
if (wPreferences.flags.noclip || !workspace->clip->collapsed) if (wPreferences.flags.noclip || !workspace->clip->collapsed)
@@ -1436,13 +1438,13 @@ static void clipIconExpose(WObjDescriptor *desc, XEvent *event)
(void) desc; (void) desc;
(void) event; (void) event;
wClipIconPaint(); wClipIconPaint(desc->parent);
} }
static void dockIconPaint(WAppIcon *btn) static void dockIconPaint(WAppIcon *btn)
{ {
if (btn == w_global.clip.icon) { if (btn == btn->icon->core->screen_ptr->clip_icon) {
wClipIconPaint(); wClipIconPaint(btn);
} else if (wIsADrawer(btn)) { } else if (wIsADrawer(btn)) {
wDrawerIconPaint(btn); wDrawerIconPaint(btn);
} else { } else {
@@ -1479,7 +1481,7 @@ static WMPropList *make_icon_state(WAppIcon *btn)
buggy = btn->buggy_app ? dYes : dNo; buggy = btn->buggy_app ? dYes : dNo;
if (!wPreferences.flags.clip_merged_in_dock && btn == w_global.clip.icon) if (!wPreferences.flags.clip_merged_in_dock && btn == btn->icon->core->screen_ptr->clip_icon)
snprintf(buffer, sizeof(buffer), "%i,%i", btn->x_pos, btn->y_pos); snprintf(buffer, sizeof(buffer), "%i,%i", btn->x_pos, btn->y_pos);
else else
snprintf(buffer, sizeof(buffer), "%hi,%hi", btn->xindex, btn->yindex); snprintf(buffer, sizeof(buffer), "%hi,%hi", btn->xindex, btn->yindex);
@@ -1602,23 +1604,25 @@ void wDockSaveState(WScreen *scr, WMPropList *old_state)
WMReleasePropList(keys); WMReleasePropList(keys);
} }
WMPutInPLDictionary(w_global.session_state, dDock, dock_state); WMPutInPLDictionary(scr->session_state, dDock, dock_state);
WMReleasePropList(dock_state); WMReleasePropList(dock_state);
} }
void wClipSaveState(void) void wClipSaveState(WScreen *scr)
{ {
WMPropList *clip_state; WMPropList *clip_state;
clip_state = make_icon_state(w_global.clip.icon); clip_state = make_icon_state(scr->clip_icon);
WMPutInPLDictionary(scr->session_state, dClip, clip_state);
WMPutInPLDictionary(w_global.session_state, dClip, clip_state);
WMReleasePropList(clip_state); WMReleasePropList(clip_state);
} }
WMPropList *wClipSaveWorkspaceState(int workspace) WMPropList *wClipSaveWorkspaceState(WScreen *scr, int workspace)
{ {
return dockSaveState(w_global.workspace.array[workspace]->clip); return dockSaveState(scr->workspaces[workspace]->clip);
} }
static Bool getBooleanDockValue(WMPropList *value, WMPropList *key) static Bool getBooleanDockValue(WMPropList *value, WMPropList *key)
@@ -1988,8 +1992,8 @@ WDock *wDockRestoreState(WScreen *scr, WMPropList *dock_state, int type)
* incremented in the loop above. * incremented in the loop above.
*/ */
} else if (old_top != dock->icon_array[0]) { } else if (old_top != dock->icon_array[0]) {
if (old_top == w_global.clip.icon) /* TODO dande: understand the logic */ if (old_top == scr->clip_icon) // TODO dande: understand the logic
w_global.clip.icon = dock->icon_array[0]; scr->clip_icon = dock->icon_array[0];
wAppIconDestroy(old_top); wAppIconDestroy(old_top);
} }
@@ -2054,7 +2058,7 @@ static WDock *findDock(WScreen *scr, XEvent *event, int *icon_pos)
} }
} }
} }
if (*icon_pos < 0 && (dock = w_global.workspace.array[w_global.workspace.current]->clip) != NULL) { if (*icon_pos < 0 && (dock = scr->workspaces[scr->current_workspace]->clip) != NULL) {
for (i = 0; i < dock->max_icons; i++) { for (i = 0; i < dock->max_icons; i++) {
if (dock->icon_array[i] if (dock->icon_array[i]
&& dock->icon_array[i]->icon->core->window == event->xclient.window) { && dock->icon_array[i]->icon->core->window == event->xclient.window) {
@@ -2601,12 +2605,12 @@ Bool wDockSnapIcon(WDock *dock, WAppIcon *icon, int req_x, int req_y, int *ret_x
int neighbours = 0; int neighbours = 0;
int start, stop, k; int start, stop, k;
start = icon->omnipresent ? 0 : w_global.workspace.current; start = icon->omnipresent ? 0 : scr->current_workspace;
stop = icon->omnipresent ? w_global.workspace.count : start + 1; stop = icon->omnipresent ? scr->workspace_count : start + 1;
aicon = NULL; aicon = NULL;
for (k = start; k < stop; k++) { for (k = start; k < stop; k++) {
WDock *tmp = w_global.workspace.array[k]->clip; WDock *tmp = scr->workspaces[k]->clip;
if (!tmp) if (!tmp)
continue; continue;
for (i = 0; i < tmp->max_icons; i++) { for (i = 0; i < tmp->max_icons; i++) {
@@ -2620,7 +2624,7 @@ Bool wDockSnapIcon(WDock *dock, WAppIcon *icon, int req_x, int req_y, int *ret_x
break; break;
} }
for (k = start; k < stop; k++) { for (k = start; k < stop; k++) {
WDock *tmp = w_global.workspace.array[k]->clip; WDock *tmp = scr->workspaces[k]->clip;
if (!tmp) if (!tmp)
continue; continue;
for (i = 0; i < tmp->max_icons; i++) { for (i = 0; i < tmp->max_icons; i++) {
@@ -2731,7 +2735,7 @@ Bool wDockFindFreeSlot(WDock *dock, int *x_pos, int *y_pos)
return True; return True;
} }
if (dock->type == WM_CLIP && dock != w_global.workspace.array[w_global.workspace.current]->clip) if (dock->type == WM_CLIP && dock != scr->workspaces[scr->current_workspace]->clip)
extra_count = scr->global_icon_count; extra_count = scr->global_icon_count;
/* if the dock is full */ /* if the dock is full */
@@ -3083,7 +3087,7 @@ static pid_t execCommand(WAppIcon *btn, const char *command, WSavedState *state)
if (btn->dock == scr->dock || btn->dock->type == WM_DRAWER || btn->omnipresent) if (btn->dock == scr->dock || btn->dock->type == WM_DRAWER || btn->omnipresent)
state->workspace = -1; state->workspace = -1;
else else
state->workspace = w_global.workspace.current; state->workspace = scr->current_workspace;
} }
wWindowAddSavedState(btn->wm_instance, btn->wm_class, cmdline, pid, state); wWindowAddSavedState(btn->wm_instance, btn->wm_class, cmdline, pid, state);
wAddDeathHandler(pid, (WDeathHandler *) trackDeadProcess, btn->dock); wAddDeathHandler(pid, (WDeathHandler *) trackDeadProcess, btn->dock);
@@ -3295,16 +3299,16 @@ void wDockTrackWindowLaunch(WDock *dock, Window window)
void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace) void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace)
{ {
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
w_global.clip.icon->dock = w_global.workspace.array[workspace]->clip; scr->clip_icon->dock = scr->workspaces[workspace]->clip;
if (w_global.workspace.current != workspace) { if (scr->current_workspace != workspace) {
WDock *old_clip = w_global.workspace.array[w_global.workspace.current]->clip; WDock *old_clip = scr->workspaces[scr->current_workspace]->clip;
WAppIconChain *chain = scr->global_icons; WAppIconChain *chain = scr->global_icons;
while (chain) { while (chain) {
wDockMoveIconBetweenDocks(chain->aicon->dock, wDockMoveIconBetweenDocks(chain->aicon->dock,
w_global.workspace.array[workspace]->clip, scr->workspaces[workspace]->clip,
chain->aicon, chain->aicon->xindex, chain->aicon->yindex); chain->aicon, chain->aicon->xindex, chain->aicon->yindex);
if (w_global.workspace.array[workspace]->clip->collapsed) if (scr->workspaces[workspace]->clip->collapsed)
XUnmapWindow(dpy, chain->aicon->icon->core->window); XUnmapWindow(dpy, chain->aicon->icon->core->window);
chain = chain->next; chain = chain->next;
} }
@@ -3324,7 +3328,7 @@ void wClipUpdateForWorkspaceChange(WScreen *scr, int workspace)
} }
old_clip->collapsed = 1; old_clip->collapsed = 1;
} }
wDockShowIcons(w_global.workspace.array[workspace]->clip); wDockShowIcons(scr->workspaces[workspace]->clip);
} }
} }
} }
@@ -3433,7 +3437,7 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
if (dock->type == WM_DOCK) { if (dock->type == WM_DOCK) {
/* Dock position menu */ /* Dock position menu */
updateDockPositionMenu(w_global.dock.pos_menu, dock); updateDockPositionMenu(scr->dock_pos_menu, dock);
dock->menu->flags.realized = 0; dock->menu->flags.realized = 0;
if (!wPreferences.flags.nodrawer) { if (!wPreferences.flags.nodrawer) {
/* add a drawer */ /* add a drawer */
@@ -3443,15 +3447,15 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
} }
} else { } else {
/* clip/drawer options */ /* clip/drawer options */
if (w_global.clip.opt_menu) if (scr->clip_options)
updateClipOptionsMenu(w_global.clip.opt_menu, dock); updateClipOptionsMenu(scr->clip_options, dock);
n_selected = numberOfSelectedIcons(dock); n_selected = numberOfSelectedIcons(dock);
if (dock->type == WM_CLIP) { if (dock->type == WM_CLIP) {
/* Rename Workspace */ /* Rename Workspace */
entry = dock->menu->entries[++index]; entry = dock->menu->entries[++index];
if (aicon == w_global.clip.icon) { if (aicon == scr->clip_icon) {
entry->callback = renameCallback; entry->callback = renameCallback;
entry->clientdata = dock; entry->clientdata = dock;
entry->flags.indicator = 0; entry->flags.indicator = 0;
@@ -3475,7 +3479,7 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
entry = dock->menu->entries[++index]; entry = dock->menu->entries[++index];
entry->clientdata = aicon; entry->clientdata = aicon;
entry->flags.indicator_on = aicon->icon->selected; entry->flags.indicator_on = aicon->icon->selected;
wMenuSetEnabled(dock->menu, index, aicon != w_global.clip.icon && !wIsADrawer(aicon)); wMenuSetEnabled(dock->menu, index, aicon != scr->clip_icon && !wIsADrawer(aicon));
/* select/unselect all icons */ /* select/unselect all icons */
entry = dock->menu->entries[++index]; entry = dock->menu->entries[++index];
@@ -3505,8 +3509,8 @@ static void openDockMenu(WDock *dock, WAppIcon *aicon, XEvent *event)
else else
entry->text = _("Move Icon To"); entry->text = _("Move Icon To");
if (w_global.clip.submenu) if (scr->clip_submenu)
updateWorkspaceMenu(w_global.clip.submenu, aicon); updateWorkspaceMenu(scr->clip_submenu, aicon);
wMenuSetEnabled(dock->menu, index, !aicon->omnipresent); wMenuSetEnabled(dock->menu, index, !aicon->omnipresent);
} }
@@ -3616,7 +3620,7 @@ static void iconDblClick(WObjDescriptor *desc, XEvent *event)
unhideHere = (event->xbutton.state & ShiftMask); unhideHere = (event->xbutton.state & ShiftMask);
/* go to the last workspace that the user worked on the app */ /* go to the last workspace that the user worked on the app */
if (wapp->last_workspace != w_global.workspace.current && !unhideHere) if (wapp->last_workspace != dock->screen_ptr->current_workspace && !unhideHere)
wWorkspaceChange(dock->screen_ptr, wapp->last_workspace); wWorkspaceChange(dock->screen_ptr, wapp->last_workspace);
wUnhideApplication(wapp, event->xbutton.button == Button2, unhideHere); wUnhideApplication(wapp, event->xbutton.button == Button2, unhideHere);
@@ -3628,7 +3632,7 @@ static void iconDblClick(WObjDescriptor *desc, XEvent *event)
if (event->xbutton.state & MOD_MASK) { if (event->xbutton.state & MOD_MASK) {
/* raise/lower dock */ /* raise/lower dock */
toggleLowered(dock); toggleLowered(dock);
} else if (btn == w_global.clip.icon) { } else if (btn == dock->screen_ptr->clip_icon) {
if (getClipButton(event->xbutton.x, event->xbutton.y) != CLIP_IDLE) if (getClipButton(event->xbutton.x, event->xbutton.y) != CLIP_IDLE)
handleClipChangeWorkspace(dock->screen_ptr, event); handleClipChangeWorkspace(dock->screen_ptr, event);
else if (wPreferences.flags.clip_merged_in_dock) { else if (wPreferences.flags.clip_merged_in_dock) {
@@ -3878,14 +3882,14 @@ static void handleClipChangeWorkspace(WScreen *scr, XEvent *event)
XEvent ev; XEvent ev;
int done, direction, new_ws; int done, direction, new_ws;
int new_dir; int new_dir;
WDock *clip = w_global.clip.icon->dock; WDock *clip = scr->clip_icon->dock;
direction = getClipButton(event->xbutton.x, event->xbutton.y); direction = getClipButton(event->xbutton.x, event->xbutton.y);
clip->lclip_button_pushed = direction == CLIP_REWIND; clip->lclip_button_pushed = direction == CLIP_REWIND;
clip->rclip_button_pushed = direction == CLIP_FORWARD; clip->rclip_button_pushed = direction == CLIP_FORWARD;
wClipIconPaint(); wClipIconPaint(scr->clip_icon);
done = 0; done = 0;
while (!done) { while (!done) {
WMMaskEvent(dpy, ExposureMask | ButtonMotionMask | ButtonReleaseMask | ButtonPressMask, &ev); WMMaskEvent(dpy, ExposureMask | ButtonMotionMask | ButtonReleaseMask | ButtonPressMask, &ev);
@@ -3900,7 +3904,7 @@ static void handleClipChangeWorkspace(WScreen *scr, XEvent *event)
direction = new_dir; direction = new_dir;
clip->lclip_button_pushed = direction == CLIP_REWIND; clip->lclip_button_pushed = direction == CLIP_REWIND;
clip->rclip_button_pushed = direction == CLIP_FORWARD; clip->rclip_button_pushed = direction == CLIP_FORWARD;
wClipIconPaint(); wClipIconPaint(scr->clip_icon);
} }
break; break;
@@ -3919,20 +3923,20 @@ static void handleClipChangeWorkspace(WScreen *scr, XEvent *event)
new_ws = wPreferences.ws_advance || (event->xbutton.state & ControlMask); new_ws = wPreferences.ws_advance || (event->xbutton.state & ControlMask);
if (direction == CLIP_FORWARD) { if (direction == CLIP_FORWARD) {
if (w_global.workspace.current < w_global.workspace.count - 1) if (scr->current_workspace < scr->workspace_count - 1)
wWorkspaceChange(scr, w_global.workspace.current + 1); wWorkspaceChange(scr, scr->current_workspace + 1);
else if (new_ws && w_global.workspace.current < MAX_WORKSPACES - 1) else if (new_ws && scr->current_workspace < MAX_WORKSPACES - 1)
wWorkspaceChange(scr, w_global.workspace.current + 1); wWorkspaceChange(scr, scr->current_workspace + 1);
else if (wPreferences.ws_cycle) else if (wPreferences.ws_cycle)
wWorkspaceChange(scr, 0); wWorkspaceChange(scr, 0);
} else if (direction == CLIP_REWIND) { } else if (direction == CLIP_REWIND) {
if (w_global.workspace.current > 0) if (scr->current_workspace > 0)
wWorkspaceChange(scr, w_global.workspace.current - 1); wWorkspaceChange(scr, scr->current_workspace - 1);
else if (w_global.workspace.current == 0 && wPreferences.ws_cycle) else if (scr->current_workspace == 0 && wPreferences.ws_cycle)
wWorkspaceChange(scr, w_global.workspace.count - 1); wWorkspaceChange(scr, scr->workspace_count - 1);
} }
wClipIconPaint(); wClipIconPaint(scr->clip_icon);
} }
static void iconMouseDown(WObjDescriptor *desc, XEvent *event) static void iconMouseDown(WObjDescriptor *desc, XEvent *event)
@@ -3964,7 +3968,7 @@ static void iconMouseDown(WObjDescriptor *desc, XEvent *event)
else else
wDockRaise(dock); wDockRaise(dock);
if ((event->xbutton.state & ShiftMask) && aicon != w_global.clip.icon && dock->type != WM_DOCK) { if ((event->xbutton.state & ShiftMask) && aicon != scr->clip_icon && dock->type != WM_DOCK) {
wIconSelect(aicon->icon); wIconSelect(aicon->icon);
return; return;
} }
@@ -3980,15 +3984,15 @@ static void iconMouseDown(WObjDescriptor *desc, XEvent *event)
if (wPreferences.single_click && !hasMoved) if (wPreferences.single_click && !hasMoved)
iconDblClick(desc, event); iconDblClick(desc, event);
} }
} else if (event->xbutton.button == Button2 && aicon == w_global.clip.icon) { } else if (event->xbutton.button == Button2 && aicon == scr->clip_icon) {
if (!w_global.clip.ws_menu) if (!scr->clip_ws_menu)
w_global.clip.ws_menu = wWorkspaceMenuMake(scr, False); scr->clip_ws_menu = wWorkspaceMenuMake(scr, False);
if (w_global.clip.ws_menu) { if (scr->clip_ws_menu) {
WMenu *wsMenu = w_global.clip.ws_menu; WMenu *wsMenu = scr->clip_ws_menu;
int xpos; int xpos;
wWorkspaceMenuUpdate(wsMenu); wWorkspaceMenuUpdate(scr, wsMenu);
xpos = event->xbutton.x_root - wsMenu->frame->core->width / 2 - 1; xpos = event->xbutton.x_root - wsMenu->frame->core->width / 2 - 1;
if (xpos < 0) { if (xpos < 0) {
@@ -4003,7 +4007,7 @@ static void iconMouseDown(WObjDescriptor *desc, XEvent *event)
(*desc->handle_mousedown) (desc, event); (*desc->handle_mousedown) (desc, event);
} }
} else if (event->xbutton.button == Button2 && dock->type == WM_CLIP && } else if (event->xbutton.button == Button2 && dock->type == WM_CLIP &&
(event->xbutton.state & ShiftMask) && aicon != w_global.clip.icon) { (event->xbutton.state & ShiftMask) && aicon != scr->clip_icon) {
wClipMakeIconOmnipresent(aicon, !aicon->omnipresent); wClipMakeIconOmnipresent(aicon, !aicon->omnipresent);
} else if (event->xbutton.button == Button3) { } else if (event->xbutton.button == Button3) {
if (event->xbutton.send_event && if (event->xbutton.send_event &&
@@ -4182,8 +4186,8 @@ static Bool iconCanBeOmnipresent(WAppIcon *aicon)
WAppIcon *btn; WAppIcon *btn;
int i, j; int i, j;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
clip = w_global.workspace.array[i]->clip; clip = scr->workspaces[i]->clip;
if (clip == aicon->dock) if (clip == aicon->dock)
continue; continue;
@@ -4207,7 +4211,7 @@ int wClipMakeIconOmnipresent(WAppIcon *aicon, int omnipresent)
WAppIconChain *new_entry, *tmp, *tmp1; WAppIconChain *new_entry, *tmp, *tmp1;
int status = WO_SUCCESS; int status = WO_SUCCESS;
if ((scr->dock && aicon->dock == scr->dock) || aicon == w_global.clip.icon) if ((scr->dock && aicon->dock == scr->dock) || aicon == scr->clip_icon)
return WO_NOT_APPLICABLE; return WO_NOT_APPLICABLE;
if (aicon->omnipresent == omnipresent) if (aicon->omnipresent == omnipresent)
@@ -4956,7 +4960,7 @@ void wDrawersSaveState(WScreen *scr)
WMAddToPLArray(all_drawers, drawer_state); WMAddToPLArray(all_drawers, drawer_state);
WMReleasePropList(drawer_state); WMReleasePropList(drawer_state);
} }
WMPutInPLDictionary(w_global.session_state, dDrawers, all_drawers); WMPutInPLDictionary(scr->session_state, dDrawers, all_drawers);
WMReleasePropList(all_drawers); WMReleasePropList(all_drawers);
} }
@@ -4968,10 +4972,10 @@ void wDrawersRestoreState(WScreen *scr)
make_keys(); make_keys();
if (w_global.session_state == NULL) if (scr->session_state == NULL)
return; return;
all_drawers = WMGetFromPLDictionary(w_global.session_state, dDrawers); all_drawers = WMGetFromPLDictionary(scr->session_state, dDrawers);
if (!all_drawers) if (!all_drawers)
return; return;
+3 -3
View File
@@ -96,9 +96,9 @@ void wDockLaunchWithState(WAppIcon *btn, WSavedState *state);
int wDockReceiveDNDDrop(WScreen *scr, XEvent *event); int wDockReceiveDNDDrop(WScreen *scr, XEvent *event);
#endif #endif
void wClipIconPaint(void); void wClipIconPaint(WAppIcon *aicon);
void wClipSaveState(void); void wClipSaveState(WScreen *scr);
WMPropList *wClipSaveWorkspaceState(int workspace); WMPropList *wClipSaveWorkspaceState(WScreen *scr, int workspace);
WAppIcon *wClipRestoreState(WScreen *scr, WMPropList *clip_state); WAppIcon *wClipRestoreState(WScreen *scr, WMPropList *clip_state);
void wDrawerIconPaint(WAppIcon *dicon); void wDrawerIconPaint(WAppIcon *dicon);
+2 -2
View File
@@ -181,8 +181,8 @@ static void panelBtnCallback(WMWidget * self, void *data)
WAppIcon *aicon = panel->editedIcon; WAppIcon *aicon = panel->editedIcon;
// Cf dock.c:dockIconPaint(WAppIcon *aicon)? // Cf dock.c:dockIconPaint(WAppIcon *aicon)?
if (aicon == w_global.clip.icon) if (aicon == aicon->icon->core->screen_ptr->clip_icon)
wClipIconPaint(); wClipIconPaint(aicon);
else if (wIsADrawer(aicon)) else if (wIsADrawer(aicon))
wDrawerIconPaint(aicon); wDrawerIconPaint(aicon);
else else
+31 -28
View File
@@ -890,7 +890,7 @@ static void handleUnmapNotify(XEvent * event)
return; return;
if (!wwin->flags.mapped && !withdraw if (!wwin->flags.mapped && !withdraw
&& wwin->frame->workspace == w_global.workspace.current && wwin->frame->workspace == wwin->screen_ptr->current_workspace
&& !wwin->flags.miniaturized && !wwin->flags.hidden) && !wwin->flags.miniaturized && !wwin->flags.hidden)
return; return;
@@ -1610,8 +1610,8 @@ static void handleKeyPress(XEvent * event)
case WKBD_WORKSPACE1 ... WKBD_WORKSPACE10: case WKBD_WORKSPACE1 ... WKBD_WORKSPACE10:
widx = command - WKBD_WORKSPACE1; widx = command - WKBD_WORKSPACE1;
i = (w_global.workspace.current / 10) * 10 + widx; i = (scr->current_workspace / 10) * 10 + widx;
if (wPreferences.ws_advance || i < w_global.workspace.count) if (wPreferences.ws_advance || i < scr->workspace_count)
wWorkspaceChange(scr, i); wWorkspaceChange(scr, i);
break; break;
@@ -1622,13 +1622,13 @@ static void handleKeyPress(XEvent * event)
wWorkspaceRelativeChange(scr, -1); wWorkspaceRelativeChange(scr, -1);
break; break;
case WKBD_LASTWORKSPACE: case WKBD_LASTWORKSPACE:
wWorkspaceChange(scr, w_global.workspace.last_used); wWorkspaceChange(scr, scr->last_workspace);
break; break;
case WKBD_MOVE_WORKSPACE1 ... WKBD_MOVE_WORKSPACE10: case WKBD_MOVE_WORKSPACE1 ... WKBD_MOVE_WORKSPACE10:
widx = command - WKBD_MOVE_WORKSPACE1; widx = command - WKBD_MOVE_WORKSPACE1;
i = (w_global.workspace.current / 10) * 10 + widx; i = (scr->current_workspace / 10) * 10 + widx;
if (wwin && (wPreferences.ws_advance || i < w_global.workspace.count)) if (wwin && (wPreferences.ws_advance || i < scr->workspace_count))
wWindowChangeWorkspace(wwin, i); wWindowChangeWorkspace(wwin, i);
break; break;
@@ -1642,7 +1642,7 @@ static void handleKeyPress(XEvent * event)
break; break;
case WKBD_MOVE_LASTWORKSPACE: case WKBD_MOVE_LASTWORKSPACE:
if (wwin) if (wwin)
wWindowChangeWorkspace(wwin, w_global.workspace.last_used); wWindowChangeWorkspace(wwin, scr->last_workspace);
break; break;
case WKBD_MOVE_NEXTWSLAYER: case WKBD_MOVE_NEXTWSLAYER:
@@ -1651,11 +1651,11 @@ static void handleKeyPress(XEvent * event)
if (wwin) { if (wwin) {
int row, column; int row, column;
row = w_global.workspace.current / 10; row = scr->current_workspace / 10;
column = w_global.workspace.current % 10; column = scr->current_workspace % 10;
if (command == WKBD_MOVE_NEXTWSLAYER) { if (command == WKBD_MOVE_NEXTWSLAYER) {
if ((row + 1) * 10 < w_global.workspace.count) if ((row + 1) * 10 < scr->workspace_count)
wWindowChangeWorkspace(wwin, column + (row + 1) * 10); wWindowChangeWorkspace(wwin, column + (row + 1) * 10);
} else { } else {
if (row > 0) if (row > 0)
@@ -1678,8 +1678,8 @@ static void handleKeyPress(XEvent * event)
widx = command - WKBD_WINDOW1; widx = command - WKBD_WINDOW1;
if (w_global.shortcut.windows[widx]) { if (scr->shortcutWindows[widx]) {
WMArray *list = w_global.shortcut.windows[widx]; WMArray *list = scr->shortcutWindows[widx];
int cw; int cw;
int count = WMGetArrayItemCount(list); int count = WMGetArrayItemCount(list);
WWindow *twin; WWindow *twin;
@@ -1687,7 +1687,7 @@ static void handleKeyPress(XEvent * event)
WWindow *wwin; WWindow *wwin;
wUnselectWindows(scr); wUnselectWindows(scr);
cw = w_global.workspace.current; cw = scr->current_workspace;
WM_ETARETI_ARRAY(list, wwin, iter) { WM_ETARETI_ARRAY(list, wwin, iter) {
if (count > 1) if (count > 1)
@@ -1705,16 +1705,18 @@ static void handleKeyPress(XEvent * event)
WMAddToArray(list, twin); WMAddToArray(list, twin);
} else if (wwin && ISMAPPED(wwin) && ISFOCUSED(wwin)) { } else if (wwin && ISMAPPED(wwin) && ISFOCUSED(wwin)) {
if (w_global.shortcut.windows[widx]) { if (scr->shortcutWindows[widx]) {
WMFreeArray(w_global.shortcut.windows[widx]); WMFreeArray(scr->shortcutWindows[widx]);
w_global.shortcut.windows[widx] = NULL; scr->shortcutWindows[widx] = NULL;
} }
if (wwin->flags.selected && scr->selected_windows) { if (wwin->flags.selected && scr->selected_windows) {
w_global.shortcut.windows[widx] = WMDuplicateArray(scr->selected_windows); scr->shortcutWindows[widx] = WMDuplicateArray(scr->selected_windows);
/*WMRemoveFromArray(scr->shortcutWindows[index], wwin);
WMInsertInArray(scr->shortcutWindows[index], 0, wwin); */
} else { } else {
w_global.shortcut.windows[widx] = WMCreateArray(4); scr->shortcutWindows[widx] = WMCreateArray(4);
WMAddToArray(w_global.shortcut.windows[widx], wwin); WMAddToArray(scr->shortcutWindows[widx], wwin);
} }
wSelectWindow(wwin, !wwin->flags.selected); wSelectWindow(wwin, !wwin->flags.selected);
@@ -1724,11 +1726,12 @@ static void handleKeyPress(XEvent * event)
XFlush(dpy); XFlush(dpy);
} else if (scr->selected_windows && WMGetArrayItemCount(scr->selected_windows)) { } else if (scr->selected_windows && WMGetArrayItemCount(scr->selected_windows)) {
if (wwin->flags.selected && scr->selected_windows) {
if (w_global.shortcut.windows[widx])
WMFreeArray(w_global.shortcut.windows[widx]);
w_global.shortcut.windows[widx] = WMDuplicateArray(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);
} }
} }
@@ -1788,11 +1791,11 @@ static void handleKeyPress(XEvent * event)
{ {
int row, column; int row, column;
row = w_global.workspace.current / 10; row = scr->current_workspace / 10;
column = w_global.workspace.current % 10; column = scr->current_workspace % 10;
if (command == WKBD_NEXTWSLAYER) { if (command == WKBD_NEXTWSLAYER) {
if ((row + 1) * 10 < w_global.workspace.count) if ((row + 1) * 10 < scr->workspace_count)
wWorkspaceChange(scr, column + (row + 1) * 10); wWorkspaceChange(scr, column + (row + 1) * 10);
} else { } else {
if (row > 0) if (row > 0)
@@ -1802,7 +1805,7 @@ static void handleKeyPress(XEvent * event)
break; break;
case WKBD_CLIPRAISELOWER: case WKBD_CLIPRAISELOWER:
if (!wPreferences.flags.noclip) if (!wPreferences.flags.noclip)
wDockRaiseLower(w_global.workspace.array[w_global.workspace.current]->clip); wDockRaiseLower(scr->workspaces[scr->current_workspace]->clip);
break; break;
case WKBD_DOCKRAISELOWER: case WKBD_DOCKRAISELOWER:
if (!wPreferences.flags.nodock) if (!wPreferences.flags.nodock)
@@ -1815,7 +1818,7 @@ static void handleKeyPress(XEvent * event)
wwin = scr->focused_window; wwin = scr->focused_window;
if (wwin && wwin->flags.mapped if (wwin && wwin->flags.mapped
&& wwin->frame->workspace == w_global.workspace.current && wwin->frame->workspace == wwin->screen_ptr->current_workspace
&& !wwin->flags.miniaturized && !wwin->flags.hidden) { && !wwin->flags.miniaturized && !wwin->flags.hidden) {
XkbGetState(dpy, XkbUseCoreKbd, &staterec); XkbGetState(dpy, XkbUseCoreKbd, &staterec);
+1 -1
View File
@@ -538,7 +538,7 @@ int main(int argc, char **argv)
w_global.program.signal_state = WSTATE_NORMAL; w_global.program.signal_state = WSTATE_NORMAL;
w_global.timestamp.last_event = CurrentTime; w_global.timestamp.last_event = CurrentTime;
w_global.timestamp.focus_change = CurrentTime; w_global.timestamp.focus_change = CurrentTime;
w_global.workspace.ignore_change = False; w_global.ignore_workspace_change = False;
w_global.shortcut.modifiers_mask = 0xff; w_global.shortcut.modifiers_mask = 0xff;
/* setup common stuff for the monitor and wmaker itself */ /* setup common stuff for the monitor and wmaker itself */
+7 -6
View File
@@ -1764,7 +1764,7 @@ static void menuMouseDown(WObjDescriptor * desc, XEvent * event)
char *name; char *name;
int number = entry_no - 3; /* Entries "New", "Destroy Last" and "Last Used" appear before workspaces */ int number = entry_no - 3; /* Entries "New", "Destroy Last" and "Last Used" appear before workspaces */
name = wstrdup(w_global.workspace.array[number]->name); name = wstrdup(scr->workspaces[number]->name);
snprintf(buffer, sizeof(buffer), _("Type the name for workspace %i:"), number + 1); snprintf(buffer, sizeof(buffer), _("Type the name for workspace %i:"), number + 1);
wMenuUnmap(scr->root_menu); wMenuUnmap(scr->root_menu);
@@ -2277,16 +2277,16 @@ void wMenuSaveState(WScreen * scr)
if (saveMenuRecurs(menus, scr, scr->root_menu)) if (saveMenuRecurs(menus, scr, scr->root_menu))
save_menus = 1; save_menus = 1;
if (w_global.workspace.menu && w_global.workspace.menu->flags.buttoned) { if (scr->workspace_menu && scr->workspace_menu->flags.buttoned) {
key = WMCreatePLString("WorkspaceMenu"); key = WMCreatePLString("WorkspaceMenu");
saveMenuInfo(menus, w_global.workspace.menu, key); saveMenuInfo(menus, scr->workspace_menu, key);
WMReleasePropList(key); WMReleasePropList(key);
save_menus = 1; save_menus = 1;
} }
if (save_menus) { if (save_menus) {
key = WMCreatePLString("Menus"); key = WMCreatePLString("Menus");
WMPutInPLDictionary(w_global.session_state, key, menus); WMPutInPLDictionary(scr->session_state, key, menus);
WMReleasePropList(key); WMReleasePropList(key);
} }
WMReleasePropList(menus); WMReleasePropList(menus);
@@ -2489,11 +2489,12 @@ void wMenuRestoreState(WScreen * scr)
{ {
WMPropList *menus, *menu, *key, *skey; WMPropList *menus, *menu, *key, *skey;
if (!w_global.session_state) if (!scr->session_state) {
return; return;
}
key = WMCreatePLString("Menus"); key = WMCreatePLString("Menus");
menus = WMGetFromPLDictionary(w_global.session_state, key); menus = WMGetFromPLDictionary(scr->session_state, key);
WMReleasePropList(key); WMReleasePropList(key);
if (!menus) if (!menus)
+1 -1
View File
@@ -586,7 +586,7 @@ char *ExpandOptions(WScreen *scr, const char *cmdline)
break; break;
case 'W': case 'W':
snprintf(tmpbuf, sizeof(tmpbuf), "0x%x", (unsigned int)w_global.workspace.current + 1); snprintf(tmpbuf, sizeof(tmpbuf), "0x%x", (unsigned int)scr->current_workspace + 1);
slen = strlen(tmpbuf); slen = strlen(tmpbuf);
olen += slen; olen += slen;
nout = realloc(out, olen); nout = realloc(out, olen);
+20 -20
View File
@@ -754,7 +754,7 @@ static void updateMoveData(WWindow * wwin, MoveData * data)
data->count = 0; data->count = 0;
tmp = scr->focused_window; tmp = scr->focused_window;
while (tmp) { while (tmp) {
if (tmp != wwin && w_global.workspace.current == tmp->frame->workspace if (tmp != wwin && scr->current_workspace == tmp->frame->workspace
&& !tmp->flags.miniaturized && !tmp->flags.miniaturized
&& !tmp->flags.hidden && !tmp->flags.obscured && !WFLAGP(tmp, sunken)) { && !tmp->flags.hidden && !tmp->flags.obscured && !WFLAGP(tmp, sunken)) {
data->topList[data->count] = tmp; data->topList[data->count] = tmp;
@@ -851,18 +851,18 @@ static Bool checkWorkspaceChange(WWindow * wwin, MoveData * data, Bool opaqueMov
Bool changed = False; Bool changed = False;
if (data->mouseX <= 1) { if (data->mouseX <= 1) {
if (w_global.workspace.current > 0) { if (scr->current_workspace > 0) {
crossWorkspace(scr, wwin, opaqueMove, w_global.workspace.current - 1, True); crossWorkspace(scr, wwin, opaqueMove, scr->current_workspace - 1, True);
changed = True; changed = True;
data->rubCount = 0; data->rubCount = 0;
} else if (w_global.workspace.current == 0 && wPreferences.ws_cycle) { } else if (scr->current_workspace == 0 && wPreferences.ws_cycle) {
crossWorkspace(scr, wwin, opaqueMove, w_global.workspace.count - 1, True); crossWorkspace(scr, wwin, opaqueMove, scr->workspace_count - 1, True);
changed = True; changed = True;
data->rubCount = 0; data->rubCount = 0;
} }
} else if (data->mouseX >= scr->scr_width - 2) { } else if (data->mouseX >= scr->scr_width - 2) {
if (w_global.workspace.current == w_global.workspace.count - 1) { if (scr->current_workspace == scr->workspace_count - 1) {
if (wPreferences.ws_cycle || w_global.workspace.count == MAX_WORKSPACES) { if (wPreferences.ws_cycle || scr->workspace_count == MAX_WORKSPACES) {
crossWorkspace(scr, wwin, opaqueMove, 0, False); crossWorkspace(scr, wwin, opaqueMove, 0, False);
changed = True; changed = True;
data->rubCount = 0; data->rubCount = 0;
@@ -886,13 +886,13 @@ static Bool checkWorkspaceChange(WWindow * wwin, MoveData * data, Bool opaqueMov
/* go to next workspace */ /* go to next workspace */
wWorkspaceNew(scr); wWorkspaceNew(scr);
crossWorkspace(scr, wwin, opaqueMove, w_global.workspace.current + 1, False); crossWorkspace(scr, wwin, opaqueMove, scr->current_workspace + 1, False);
changed = True; changed = True;
data->rubCount = 0; data->rubCount = 0;
} }
} else if (w_global.workspace.current < w_global.workspace.count) { } else if (scr->current_workspace < scr->workspace_count) {
/* go to next workspace */ /* go to next workspace */
crossWorkspace(scr, wwin, opaqueMove, w_global.workspace.current + 1, False); crossWorkspace(scr, wwin, opaqueMove, scr->current_workspace + 1, False);
changed = True; changed = True;
data->rubCount = 0; data->rubCount = 0;
} }
@@ -1513,17 +1513,17 @@ int wKeyboardMoveResizeWindow(WWindow * wwin)
if (wPreferences.ws_cycle) { if (wPreferences.ws_cycle) {
if (src_x + off_x + ww < 20) { if (src_x + off_x + ww < 20) {
if (!w_global.workspace.current) if (!scr->current_workspace)
wWorkspaceChange(scr, w_global.workspace.count - 1); wWorkspaceChange(scr, scr->workspace_count - 1);
else else
wWorkspaceChange(scr, w_global.workspace.current - 1); wWorkspaceChange(scr, scr->current_workspace - 1);
off_x += scr_width; off_x += scr_width;
} else if (src_x + off_x + 20 > scr_width) { } else if (src_x + off_x + 20 > scr_width) {
if (w_global.workspace.current == w_global.workspace.count - 1) if (scr->current_workspace == scr->workspace_count - 1)
wWorkspaceChange(scr, 0); wWorkspaceChange(scr, 0);
else else
wWorkspaceChange(scr, w_global.workspace.current + 1); wWorkspaceChange(scr, scr->current_workspace + 1);
off_x -= scr_width; off_x -= scr_width;
} }
@@ -1642,7 +1642,7 @@ int wKeyboardMoveResizeWindow(WWindow * wwin)
wWindowConfigure(wwin, src_x + off_x, src_y + off_y, ww, wh - vert_border); wWindowConfigure(wwin, src_x + off_x, src_y + off_y, ww, wh - vert_border);
wWindowSynthConfigureNotify(wwin); wWindowSynthConfigureNotify(wwin);
} }
wWindowChangeWorkspace(wwin, w_global.workspace.current); wWindowChangeWorkspace(wwin, scr->current_workspace);
wSetFocusTo(scr, wwin); wSetFocusTo(scr, wwin);
} }
@@ -1799,7 +1799,7 @@ int wMouseMoveWindow(WWindow * wwin, XEvent * ev)
draw_snap_frame(wwin, moveData.snap); draw_snap_frame(wwin, moveData.snap);
if (!warped && !wPreferences.no_autowrap) { if (!warped && !wPreferences.no_autowrap) {
int oldWorkspace = w_global.workspace.current; int oldWorkspace = scr->current_workspace;
if (wPreferences.move_display == WDIS_NEW && !scr->selected_windows) { if (wPreferences.move_display == WDIS_NEW && !scr->selected_windows) {
showPosition(wwin, moveData.realX, moveData.realY); showPosition(wwin, moveData.realX, moveData.realY);
@@ -1811,7 +1811,7 @@ int wMouseMoveWindow(WWindow * wwin, XEvent * ev)
moveData.realY - wwin->frame_y); moveData.realY - wwin->frame_y);
} }
if (checkWorkspaceChange(wwin, &moveData, opaqueMove)) { if (checkWorkspaceChange(wwin, &moveData, opaqueMove)) {
if (w_global.workspace.current != oldWorkspace if (scr->current_workspace != oldWorkspace
&& wPreferences.edge_resistance > 0 && wPreferences.edge_resistance > 0
&& scr->selected_windows == NULL) && scr->selected_windows == NULL)
updateMoveData(wwin, &moveData); updateMoveData(wwin, &moveData);
@@ -1902,7 +1902,7 @@ int wMouseMoveWindow(WWindow * wwin, XEvent * ev)
XUngrabKeyboard(dpy, CurrentTime); XUngrabKeyboard(dpy, CurrentTime);
XUngrabServer(dpy); XUngrabServer(dpy);
if (!opaqueMove) { if (!opaqueMove) {
wWindowChangeWorkspace(wwin, w_global.workspace.current); wWindowChangeWorkspace(wwin, scr->current_workspace);
wSetFocusTo(scr, wwin); wSetFocusTo(scr, wwin);
} }
if (wPreferences.move_display == WDIS_NEW) if (wPreferences.move_display == WDIS_NEW)
@@ -2301,7 +2301,7 @@ static void selectWindowsInside(WScreen * scr, int x1, int y1, int x2, int y2)
tmpw = scr->focused_window; tmpw = scr->focused_window;
while (tmpw != NULL) { while (tmpw != NULL) {
if (!(tmpw->flags.miniaturized || tmpw->flags.hidden)) { if (!(tmpw->flags.miniaturized || tmpw->flags.hidden)) {
if ((tmpw->frame->workspace == w_global.workspace.current || IS_OMNIPRESENT(tmpw)) if ((tmpw->frame->workspace == scr->current_workspace || IS_OMNIPRESENT(tmpw))
&& (tmpw->frame_x >= x1) && (tmpw->frame_y >= y1) && (tmpw->frame_x >= x1) && (tmpw->frame_y >= y1)
&& (tmpw->frame->core->width + tmpw->frame_x <= x2) && (tmpw->frame->core->width + tmpw->frame_x <= x2)
&& (tmpw->frame->core->height + tmpw->frame_y <= y2)) { && (tmpw->frame->core->height + tmpw->frame_y <= y2)) {
+3 -3
View File
@@ -172,7 +172,7 @@ void PlaceIcon(WScreen *scr, int *x_ret, int *y_ret, int head)
while (obj) { while (obj) {
int x, y; int x, y;
if (iconPosition(obj, sx1, sy1, sx2, sy2, w_global.workspace.current, &x, &y)) { if (iconPosition(obj, sx1, sy1, sx2, sy2, scr->current_workspace, &x, &y)) {
int xdi, ydi; /* rounded down */ int xdi, ydi; /* rounded down */
int xui, yui; /* rounded up */ int xui, yui; /* rounded up */
@@ -269,7 +269,7 @@ static int calcSumOfCoveredAreas(WWindow *wwin, int x, int y, int w, int h)
ty = test_window->frame_y; ty = test_window->frame_y;
if (test_window->flags.mapped || (test_window->flags.shaded && if (test_window->flags.mapped || (test_window->flags.shaded &&
test_window->frame->workspace == w_global.workspace.current && test_window->frame->workspace == wwin->screen_ptr->current_workspace &&
!(test_window->flags.miniaturized || test_window->flags.hidden))) { !(test_window->flags.miniaturized || test_window->flags.hidden))) {
sum_isect += calcIntersectionArea(tx, ty, tw, th, x, y, w, h); sum_isect += calcIntersectionArea(tx, ty, tw, th, x, y, w, h);
} }
@@ -313,7 +313,7 @@ window_overlaps(WWindow *win, int x, int y, int w, int h, Bool ignore_sunken)
(ty < (y + h)) && ((ty + th) > y) && (ty < (y + h)) && ((ty + th) > y) &&
(win->flags.mapped || (win->flags.mapped ||
(win->flags.shaded && (win->flags.shaded &&
win->frame->workspace == w_global.workspace.current && win->frame->workspace == win->screen_ptr->current_workspace &&
!(win->flags.miniaturized || win->flags.hidden)))) { !(win->flags.miniaturized || win->flags.hidden)))) {
return True; return True;
} }
+6 -6
View File
@@ -302,12 +302,12 @@ static void saveSessionCommand(WMenu * menu, WMenuEntry * entry)
wScreenSaveState(menu->frame->screen_ptr); wScreenSaveState(menu->frame->screen_ptr);
} }
static void clearSessionCommand(WMenu *menu, WMenuEntry *entry) static void clearSessionCommand(WMenu * menu, WMenuEntry * entry)
{ {
/* Parameter not used, but tell the compiler that it is ok */ /* Parameter not used, but tell the compiler that it is ok */
(void) entry; (void) entry;
wSessionClearState(); wSessionClearState(menu->frame->screen_ptr);
wScreenSaveState(menu->frame->screen_ptr); wScreenSaveState(menu->frame->screen_ptr);
} }
@@ -795,8 +795,8 @@ static void constructPLMenuFromPipe(WMenu * menu, WMenuEntry * entry)
} }
static void cleanupWorkspaceMenu(WMenu *menu) static void cleanupWorkspaceMenu(WMenu *menu)
{ {
if (w_global.workspace.menu == menu) if (menu->frame->screen_ptr->workspace_menu == menu)
w_global.workspace.menu = NULL; menu->frame->screen_ptr->workspace_menu = NULL;
} }
static WMenuEntry *addWorkspaceMenu(WScreen *scr, WMenu *menu, const char *title) static WMenuEntry *addWorkspaceMenu(WScreen *scr, WMenu *menu, const char *title)
@@ -814,11 +814,11 @@ static WMenuEntry *addWorkspaceMenu(WScreen *scr, WMenu *menu, const char *title
wsmenu = wWorkspaceMenuMake(scr, True); wsmenu = wWorkspaceMenuMake(scr, True);
wsmenu->on_destroy = cleanupWorkspaceMenu; wsmenu->on_destroy = cleanupWorkspaceMenu;
w_global.workspace.menu = wsmenu; scr->workspace_menu = wsmenu;
entry = wMenuAddCallback(menu, title, NULL, NULL); entry = wMenuAddCallback(menu, title, NULL, NULL);
wMenuEntrySetCascade(menu, entry, wsmenu); wMenuEntrySetCascade(menu, entry, wsmenu);
wWorkspaceMenuUpdate(wsmenu); wWorkspaceMenuUpdate(scr, wsmenu);
} }
return entry; return entry;
} }
+18 -19
View File
@@ -771,26 +771,25 @@ void wScreenRestoreState(WScreen * scr)
snprintf(buf, sizeof(buf), "WMState.%i", scr->screen); snprintf(buf, sizeof(buf), "WMState.%i", scr->screen);
path = wdefaultspathfordomain(buf); path = wdefaultspathfordomain(buf);
} }
scr->session_state = WMReadPropListFromFile(path);
w_global.session_state = WMReadPropListFromFile(path);
wfree(path); wfree(path);
if (!w_global.session_state && w_global.screen_count > 1) { if (!scr->session_state && w_global.screen_count > 1) {
path = wdefaultspathfordomain("WMState"); path = wdefaultspathfordomain("WMState");
w_global.session_state = WMReadPropListFromFile(path); scr->session_state = WMReadPropListFromFile(path);
wfree(path); wfree(path);
} }
if (!w_global.session_state) if (!scr->session_state)
w_global.session_state = WMCreatePLDictionary(NULL, NULL); scr->session_state = WMCreatePLDictionary(NULL, NULL);
if (!wPreferences.flags.nodock) { if (!wPreferences.flags.nodock) {
state = WMGetFromPLDictionary(w_global.session_state, dDock); state = WMGetFromPLDictionary(scr->session_state, dDock);
scr->dock = wDockRestoreState(scr, state, WM_DOCK); scr->dock = wDockRestoreState(scr, state, WM_DOCK);
} }
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
state = WMGetFromPLDictionary(w_global.session_state, dClip); state = WMGetFromPLDictionary(scr->session_state, dClip);
w_global.clip.icon = wClipRestoreState(scr, state); scr->clip_icon = wClipRestoreState(scr, state);
} }
if (!wPreferences.flags.nodrawer) { if (!wPreferences.flags.nodrawer) {
@@ -827,8 +826,8 @@ void wScreenSaveState(WScreen * scr)
if (wPreferences.flags.noupdates) if (wPreferences.flags.noupdates)
return; return;
old_state = w_global.session_state; old_state = scr->session_state;
w_global.session_state = WMCreatePLDictionary(NULL, NULL); scr->session_state = WMCreatePLDictionary(NULL, NULL);
WMPLSetCaseSensitive(True); WMPLSetCaseSensitive(True);
@@ -837,24 +836,24 @@ void wScreenSaveState(WScreen * scr)
wDockSaveState(scr, old_state); wDockSaveState(scr, old_state);
} else { } else {
if ((foo = WMGetFromPLDictionary(old_state, dDock)) != NULL) { if ((foo = WMGetFromPLDictionary(old_state, dDock)) != NULL) {
WMPutInPLDictionary(w_global.session_state, dDock, foo); WMPutInPLDictionary(scr->session_state, dDock, foo);
} }
} }
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
wClipSaveState(); wClipSaveState(scr);
} else { } else {
if ((foo = WMGetFromPLDictionary(old_state, dClip)) != NULL) { if ((foo = WMGetFromPLDictionary(old_state, dClip)) != NULL) {
WMPutInPLDictionary(w_global.session_state, dClip, foo); WMPutInPLDictionary(scr->session_state, dClip, foo);
} }
} }
wWorkspaceSaveState(old_state); wWorkspaceSaveState(scr, old_state);
if (!wPreferences.flags.nodrawer) { if (!wPreferences.flags.nodrawer) {
wDrawersSaveState(scr); wDrawersSaveState(scr);
} else { } else {
if ((foo = WMGetFromPLDictionary(old_state, dDrawers)) != NULL) { if ((foo = WMGetFromPLDictionary(old_state, dDrawers)) != NULL) {
WMPutInPLDictionary(w_global.session_state, dDrawers, foo); WMPutInPLDictionary(scr->session_state, dDrawers, foo);
} }
} }
@@ -863,10 +862,10 @@ void wScreenSaveState(WScreen * scr)
wSessionSaveState(scr); wSessionSaveState(scr);
} else { } else {
if ((foo = WMGetFromPLDictionary(old_state, dApplications)) != NULL) { if ((foo = WMGetFromPLDictionary(old_state, dApplications)) != NULL) {
WMPutInPLDictionary(w_global.session_state, dApplications, foo); WMPutInPLDictionary(scr->session_state, dApplications, foo);
} }
if ((foo = WMGetFromPLDictionary(old_state, dWorkspace)) != NULL) { if ((foo = WMGetFromPLDictionary(old_state, dWorkspace)) != NULL) {
WMPutInPLDictionary(w_global.session_state, dWorkspace, foo); WMPutInPLDictionary(scr->session_state, dWorkspace, foo);
} }
} }
@@ -882,7 +881,7 @@ void wScreenSaveState(WScreen * scr)
snprintf(buf, sizeof(buf), "WMState.%i", scr->screen); snprintf(buf, sizeof(buf), "WMState.%i", scr->screen);
str = wdefaultspathfordomain(buf); str = wdefaultspathfordomain(buf);
} }
if (!WMWritePropListToFile(w_global.session_state, str)) { if (!WMWritePropListToFile(scr->session_state, str)) {
werror(_("could not save session state in %s"), str); werror(_("could not save session state in %s"), str);
} }
wfree(str); wfree(str);
+29
View File
@@ -105,6 +105,10 @@ typedef struct _WScreen {
WMArray *fakeGroupLeaders; /* list of fake window group ids */ WMArray *fakeGroupLeaders; /* list of fake window group ids */
struct WAppIcon *app_icon_list; /* list of all app-icons on screen */
struct WApplication *wapp_list; /* list of all aplications */
WMBag *stacking_list; /* bag of lists of windows WMBag *stacking_list; /* bag of lists of windows
* in stacking order. * in stacking order.
* Indexed by window level * Indexed by window level
@@ -115,6 +119,14 @@ typedef struct _WScreen {
int window_count; /* number of windows in window_list */ int window_count; /* number of windows in window_list */
int workspace_count; /* number of workspaces */
struct WWorkspace **workspaces; /* workspace array */
int current_workspace; /* current workspace number */
int last_workspace; /* last used workspace number */
WReservedArea *reservedAreas; /* used to build totalUsableArea */ WReservedArea *reservedAreas; /* used to build totalUsableArea */
WArea *usableArea; /* area of the workspace where WArea *usableArea; /* area of the workspace where
@@ -149,6 +161,8 @@ typedef struct _WScreen {
needs to be a core font so we can needs to be a core font so we can
use it with a XORing GC */ use it with a XORing GC */
WMFont *workspace_name_font;
WMColor *select_color; WMColor *select_color;
WMColor *select_text_color; WMColor *select_text_color;
/* foreground colors */ /* foreground colors */
@@ -205,12 +219,21 @@ typedef struct _WScreen {
struct WMenu *root_menu; /* root window menu */ struct WMenu *root_menu; /* root window menu */
struct WMenu *switch_menu; /* window list menu */ struct WMenu *switch_menu; /* window list menu */
struct WMenu *workspace_menu; /* workspace operation */
struct WMenu *window_menu; /* window command menu */ struct WMenu *window_menu; /* window command menu */
struct WMenu *icon_menu; /* icon/appicon menu */ struct WMenu *icon_menu; /* icon/appicon menu */
struct WMenu *workspace_submenu; /* workspace list for window_menu */
struct WDock *dock; /* the application dock */ struct WDock *dock; /* the application dock */
struct WMenu *dock_pos_menu; /* Dock position menu */
struct WPixmap *dock_dots; /* 3 dots for the Dock */ struct WPixmap *dock_dots; /* 3 dots for the Dock */
Window dock_shadow; /* shadow for dock buttons */ Window dock_shadow; /* shadow for dock buttons */
struct WAppIcon *clip_icon; /* The clip main icon, or the dock's, if they are merged */
struct WMenu *clip_menu; /* Menu for clips */
struct WMenu *clip_submenu; /* Workspace list for clips */
struct WMenu *clip_options; /* Options for Clip */
struct WMenu *clip_ws_menu; /* workspace menu for clip */
struct WMenu *drawer_menu; /* Menu for drawers */
struct WDock *last_dock; struct WDock *last_dock;
WAppIconChain *global_icons; /* for omnipresent icons chain in clip */ WAppIconChain *global_icons; /* for omnipresent icons chain in clip */
int global_icon_count; /* How many global icons do we have */ int global_icon_count; /* How many global icons do we have */
@@ -237,6 +260,8 @@ typedef struct _WScreen {
/* state and other informations */ /* state and other informations */
short cascade_index; /* for cascade window placement */ short cascade_index; /* for cascade window placement */
WMPropList *session_state;
/* for double-click detection */ /* for double-click detection */
Time last_click_time; Time last_click_time;
Window last_click_window; Window last_click_window;
@@ -254,6 +279,10 @@ typedef struct _WScreen {
WMHandlerID *autoRaiseTimer; WMHandlerID *autoRaiseTimer;
Window autoRaiseWindow; /* window that is scheduled to be Window autoRaiseWindow; /* window that is scheduled to be
* raised */ * raised */
/* for window shortcuts */
WMArray *shortcutWindows[MAX_WINDOW_SHORTCUTS];
#ifdef XDND #ifdef XDND
char *xdestring; char *xdestring;
#endif #endif
+33 -34
View File
@@ -198,8 +198,8 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp)
name = WMCreatePLString(buffer); name = WMCreatePLString(buffer);
cmd = WMCreatePLString(command); cmd = WMCreatePLString(command);
workspace = WMCreatePLString(scr->workspaces[wwin->frame->workspace]->name);
workspace = WMCreatePLString(w_global.workspace.array[wwin->frame->workspace]->name);
shaded = wwin->flags.shaded ? sYes : sNo; shaded = wwin->flags.shaded ? sYes : sNo;
miniaturized = wwin->flags.miniaturized ? sYes : sNo; miniaturized = wwin->flags.miniaturized ? sYes : sNo;
hidden = wwin->flags.hidden ? sYes : sNo; hidden = wwin->flags.hidden ? sYes : sNo;
@@ -208,8 +208,8 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp)
geometry = WMCreatePLString(buffer); geometry = WMCreatePLString(buffer);
for (mask = 0, i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { for (mask = 0, i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
if (w_global.shortcut.windows[i] != NULL && if (scr->shortcutWindows[i] != NULL &&
WMGetFirstInArray(w_global.shortcut.windows[i], wwin) != WANotFound) WMGetFirstInArray(scr->shortcutWindows[i], wwin) != WANotFound)
mask |= 1 << i; mask |= 1 << i;
} }
@@ -237,11 +237,11 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp)
/* Try the clips */ /* Try the clips */
if (name == NULL) { if (name == NULL) {
for (i = 0; i < w_global.workspace.count; i++) for (i = 0; i < scr->workspace_count; i++)
if (w_global.workspace.array[i]->clip == wapp->app_icon->dock) if (scr->workspaces[i]->clip == wapp->app_icon->dock)
break; break;
if (i < w_global.workspace.count) if (i < scr->workspace_count)
name = w_global.workspace.array[i]->name; name = scr->workspaces[i]->name;
} }
/* Try the drawers */ /* Try the drawers */
if (name == NULL) { if (name == NULL) {
@@ -280,9 +280,9 @@ void wSessionSaveState(WScreen * scr)
make_keys(); make_keys();
if (!w_global.session_state) { if (!scr->session_state) {
w_global.session_state = WMCreatePLDictionary(NULL, NULL); scr->session_state = WMCreatePLDictionary(NULL, NULL);
if (!w_global.session_state) if (!scr->session_state)
return; return;
} }
@@ -312,27 +312,26 @@ void wSessionSaveState(WScreen * scr)
} }
wwin = wwin->prev; wwin = wwin->prev;
} }
WMRemoveFromPLDictionary(scr->session_state, sApplications);
WMRemoveFromPLDictionary(w_global.session_state, sApplications); WMPutInPLDictionary(scr->session_state, sApplications, list);
WMPutInPLDictionary(w_global.session_state, sApplications, list);
WMReleasePropList(list); WMReleasePropList(list);
wks = WMCreatePLString(w_global.workspace.array[w_global.workspace.current]->name); wks = WMCreatePLString(scr->workspaces[scr->current_workspace]->name);
WMPutInPLDictionary(w_global.session_state, sWorkspace, wks); WMPutInPLDictionary(scr->session_state, sWorkspace, wks);
WMReleasePropList(wks); WMReleasePropList(wks);
WMFreeArray(wapp_list); WMFreeArray(wapp_list);
} }
void wSessionClearState(void) void wSessionClearState(WScreen * scr)
{ {
make_keys(); make_keys();
if (!w_global.session_state) if (!scr->session_state)
return; return;
WMRemoveFromPLDictionary(w_global.session_state, sApplications); WMRemoveFromPLDictionary(scr->session_state, sApplications);
WMRemoveFromPLDictionary(w_global.session_state, sWorkspace); WMRemoveFromPLDictionary(scr->session_state, sWorkspace);
} }
static pid_t execCommand(WScreen *scr, char *command) static pid_t execCommand(WScreen *scr, char *command)
@@ -369,7 +368,7 @@ static pid_t execCommand(WScreen *scr, char *command)
return pid; return pid;
} }
static WSavedState *getWindowState(WMPropList *win_state) static WSavedState *getWindowState(WScreen * scr, WMPropList * win_state)
{ {
WSavedState *state = wmalloc(sizeof(WSavedState)); WSavedState *state = wmalloc(sizeof(WSavedState));
WMPropList *value; WMPropList *value;
@@ -383,8 +382,8 @@ static WSavedState *getWindowState(WMPropList *win_state)
tmp = WMGetFromPLString(value); tmp = WMGetFromPLString(value);
if (sscanf(tmp, "%i", &state->workspace) != 1) { if (sscanf(tmp, "%i", &state->workspace) != 1) {
state->workspace = -1; state->workspace = -1;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (strcmp(w_global.workspace.array[i]->name, tmp) == 0) { if (strcmp(scr->workspaces[i]->name, tmp) == 0) {
state->workspace = i; state->workspace = i;
break; break;
} }
@@ -432,12 +431,12 @@ void wSessionRestoreState(WScreen *scr)
make_keys(); make_keys();
if (!w_global.session_state) if (!scr->session_state)
return; return;
WMPLSetCaseSensitive(True); WMPLSetCaseSensitive(True);
apps = WMGetFromPLDictionary(w_global.session_state, sApplications); apps = WMGetFromPLDictionary(scr->session_state, sApplications);
if (!apps) if (!apps)
return; return;
@@ -461,7 +460,7 @@ void wSessionRestoreState(WScreen *scr)
if (!instance && !class) if (!instance && !class)
continue; continue;
state = getWindowState(win_info); state = getWindowState(scr, win_info);
dock = NULL; dock = NULL;
value = WMGetFromPLDictionary(win_info, sDock); value = WMGetFromPLDictionary(win_info, sDock);
@@ -472,9 +471,9 @@ void wSessionRestoreState(WScreen *scr)
/* Try the clips */ /* Try the clips */
if (dock == NULL) { if (dock == NULL) {
for (j = 0; j < w_global.workspace.count; j++) { for (j = 0; j < scr->workspace_count; j++) {
if (strcmp(w_global.workspace.array[j]->name, tmp) == 0) { if (strcmp(scr->workspaces[j]->name, tmp) == 0) {
dock = w_global.workspace.array[j]->clip; dock = scr->workspaces[j]->clip;
break; break;
} }
} }
@@ -494,8 +493,8 @@ void wSessionRestoreState(WScreen *scr)
} else { } else {
if (n == 0) { if (n == 0) {
dock = scr->dock; dock = scr->dock;
} else if (n > 0 && n <= w_global.workspace.count) { } else if (n > 0 && n <= scr->workspace_count) {
dock = w_global.workspace.array[n - 1]->clip; dock = scr->workspaces[n - 1]->clip;
} }
} }
} }
@@ -537,12 +536,12 @@ void wSessionRestoreLastWorkspace(WScreen * scr)
make_keys(); make_keys();
if (!w_global.session_state) if (!scr->session_state)
return; return;
WMPLSetCaseSensitive(True); WMPLSetCaseSensitive(True);
wks = WMGetFromPLDictionary(w_global.session_state, sWorkspace); wks = WMGetFromPLDictionary(scr->session_state, sWorkspace);
if (!wks || !WMIsPLString(wks)) if (!wks || !WMIsPLString(wks))
return; return;
@@ -555,8 +554,8 @@ void wSessionRestoreLastWorkspace(WScreen * scr)
WMPLSetCaseSensitive(False); WMPLSetCaseSensitive(False);
/* Get the workspace number for the workspace name */ /* Get the workspace number for the workspace name */
w = wGetWorkspaceNumber(value); w = wGetWorkspaceNumber(scr, value);
if (w != w_global.workspace.current && w < w_global.workspace.count) if (w != scr->current_workspace && w < scr->workspace_count)
wWorkspaceChange(scr, w); wWorkspaceChange(scr, w);
} }
+1 -1
View File
@@ -23,7 +23,7 @@
#define WMSESSION_H_ #define WMSESSION_H_
void wSessionSaveState(WScreen *scr); void wSessionSaveState(WScreen *scr);
void wSessionClearState(void); void wSessionClearState(WScreen *scr);
void wSessionRestoreState(WScreen *scr); void wSessionRestoreState(WScreen *scr);
void wSessionRestoreLastWorkspace(WScreen *scr); void wSessionRestoreLastWorkspace(WScreen *scr);
#endif #endif
+6 -6
View File
@@ -674,10 +674,10 @@ void StartUp(Bool defaultScreenOnly)
/* auto-launch apps in clip */ /* auto-launch apps in clip */
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
int i; int i;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < wScreen[j]->workspace_count; i++) {
if (w_global.workspace.array[i]->clip) { if (wScreen[j]->workspaces[i]->clip) {
wScreen[j]->last_dock = w_global.workspace.array[i]->clip; wScreen[j]->last_dock = wScreen[j]->workspaces[i]->clip;
wDockDoAutoLaunch(w_global.workspace.array[i]->clip, i); wDockDoAutoLaunch(wScreen[j]->workspaces[i]->clip, i);
} }
} }
} }
@@ -828,9 +828,9 @@ static void manageAllWindows(WScreen * scr, int crashRecovery)
WMNextEvent(dpy, &ev); WMNextEvent(dpy, &ev);
WMHandleEvent(&ev); WMHandleEvent(&ev);
} }
w_global.workspace.last_used = 0; scr->last_workspace = 0;
wWorkspaceForceChange(scr, 0); wWorkspaceForceChange(scr, 0);
if (!wPreferences.flags.noclip) if (!wPreferences.flags.noclip)
wDockShowIcons(w_global.workspace.array[w_global.workspace.current]->clip); wDockShowIcons(scr->workspaces[scr->current_workspace]->clip);
scr->flags.startup2 = 0; scr->flags.startup2 = 0;
} }
+3 -3
View File
@@ -227,7 +227,7 @@ void UpdateSwitchMenu(WScreen * scr, WWindow * wwin, int action)
snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, "[*]"); snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, "[*]");
else else
snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, "[%s]", snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, "[%s]",
w_global.workspace.array[wwin->frame->workspace]->name); scr->workspaces[wwin->frame->workspace]->name);
if (wwin->flags.hidden) { if (wwin->flags.hidden) {
entry->flags.indicator_type = MI_HIDDEN; entry->flags.indicator_type = MI_HIDDEN;
@@ -285,7 +285,7 @@ void UpdateSwitchMenu(WScreen * scr, WWindow * wwin, int action)
} else { } else {
snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH, snprintf(entry->rtext, MAX_WORKSPACENAME_WIDTH,
"[%s]", "[%s]",
w_global.workspace.array[wwin->frame->workspace]->name); scr->workspaces[wwin->frame->workspace]->name);
} }
rt = entry->rtext; rt = entry->rtext;
@@ -363,7 +363,7 @@ static void UpdateSwitchMenuWorkspace(WScreen *scr, int workspace)
snprintf(menu->entries[i]->rtext, MAX_WORKSPACENAME_WIDTH, "[*]"); snprintf(menu->entries[i]->rtext, MAX_WORKSPACENAME_WIDTH, "[*]");
else else
snprintf(menu->entries[i]->rtext, MAX_WORKSPACENAME_WIDTH, "[%s]", snprintf(menu->entries[i]->rtext, MAX_WORKSPACENAME_WIDTH, "[%s]",
w_global.workspace.array[wwin->frame->workspace]->name); scr->workspaces[wwin->frame->workspace]->name);
menu->flags.realized = 0; menu->flags.realized = 0;
} }
} }
+1 -1
View File
@@ -75,7 +75,7 @@ struct SwitchPanel {
static int canReceiveFocus(WWindow *wwin) static int canReceiveFocus(WWindow *wwin)
{ {
if (wwin->frame->workspace != w_global.workspace.current) if (wwin->frame->workspace != wwin->screen_ptr->current_workspace)
return 0; return 0;
if (wPreferences.cycle_active_head_only && if (wPreferences.cycle_active_head_only &&
+2 -2
View File
@@ -479,7 +479,7 @@ RImage *get_icon_image(WScreen *scr, const char *winstance, const char *wclass,
return get_rimage_from_file(scr, file_name, max_size); return get_rimage_from_file(scr, file_name, max_size);
} }
int wDefaultGetStartWorkspace(const char *instance, const char *class) int wDefaultGetStartWorkspace(WScreen *scr, const char *instance, const char *class)
{ {
WMPropList *value; WMPropList *value;
int w; int w;
@@ -502,7 +502,7 @@ int wDefaultGetStartWorkspace(const char *instance, const char *class)
return -1; return -1;
/* Get the workspace number for the workspace name */ /* Get the workspace number for the workspace name */
w = wGetWorkspaceNumber(tmp); w = wGetWorkspaceNumber(scr, tmp);
return w; return w;
} }
+32 -31
View File
@@ -178,14 +178,14 @@ void wWindowDestroy(WWindow *wwin)
wwin->flags.destroyed = 1; wwin->flags.destroyed = 1;
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
if (!w_global.shortcut.windows[i]) if (!wwin->screen_ptr->shortcutWindows[i])
continue; continue;
WMRemoveFromArray(w_global.shortcut.windows[i], wwin); WMRemoveFromArray(wwin->screen_ptr->shortcutWindows[i], wwin);
if (!WMGetArrayItemCount(w_global.shortcut.windows[i])) { if (!WMGetArrayItemCount(wwin->screen_ptr->shortcutWindows[i])) {
WMFreeArray(w_global.shortcut.windows[i]); WMFreeArray(wwin->screen_ptr->shortcutWindows[i]);
w_global.shortcut.windows[i] = NULL; wwin->screen_ptr->shortcutWindows[i] = NULL;
} }
} }
@@ -373,7 +373,7 @@ void wWindowSetupInitialAttributes(WWindow *wwin, int *level, int *workspace)
} }
if (tmp_workspace >= 0) if (tmp_workspace >= 0)
*workspace = tmp_workspace % w_global.workspace.count; *workspace = tmp_workspace % scr->workspace_count;
} }
/* /*
@@ -833,16 +833,17 @@ WWindow *wManageWindow(WScreen *scr, Window window)
wwin->flags.miniaturized = win_state->state->miniaturized; wwin->flags.miniaturized = win_state->state->miniaturized;
if (!IS_OMNIPRESENT(wwin)) { if (!IS_OMNIPRESENT(wwin)) {
int w = wDefaultGetStartWorkspace(wwin->wm_instance, wwin->wm_class); int w = wDefaultGetStartWorkspace(scr, wwin->wm_instance,
if (w < 0 || w >= w_global.workspace.count) { wwin->wm_class);
if (w < 0 || w >= scr->workspace_count) {
workspace = win_state->state->workspace; workspace = win_state->state->workspace;
if (workspace >= w_global.workspace.count) if (workspace >= scr->workspace_count)
workspace = w_global.workspace.current; workspace = scr->current_workspace;
} else { } else {
workspace = w; workspace = w;
} }
} else { } else {
workspace = w_global.workspace.current; workspace = scr->current_workspace;
} }
} }
@@ -883,10 +884,10 @@ WWindow *wManageWindow(WScreen *scr, Window window)
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
if (mask & (1 << i)) { if (mask & (1 << i)) {
if (!w_global.shortcut.windows[i]) if (!scr->shortcutWindows[i])
w_global.shortcut.windows[i] = WMCreateArray(4); scr->shortcutWindows[i] = WMCreateArray(4);
WMAddToArray(w_global.shortcut.windows[i], wwin); WMAddToArray(scr->shortcutWindows[i], wwin);
} }
} }
} }
@@ -905,20 +906,20 @@ WWindow *wManageWindow(WScreen *scr, Window window)
/* set workspace on which the window starts */ /* set workspace on which the window starts */
if (workspace >= 0) { if (workspace >= 0) {
if (workspace > w_global.workspace.count - 1) if (workspace > scr->workspace_count - 1)
workspace = workspace % w_global.workspace.count; workspace = workspace % scr->workspace_count;
} else { } else {
int w; int w;
w = wDefaultGetStartWorkspace(wwin->wm_instance, wwin->wm_class); w = wDefaultGetStartWorkspace(scr, wwin->wm_instance, wwin->wm_class);
if (w >= 0 && w < w_global.workspace.count && !(IS_OMNIPRESENT(wwin))) { if (w >= 0 && w < scr->workspace_count && !(IS_OMNIPRESENT(wwin))) {
workspace = w; workspace = w;
} else { } else {
if (wPreferences.open_transients_with_parent && transientOwner) if (wPreferences.open_transients_with_parent && transientOwner)
workspace = transientOwner->frame->workspace; workspace = transientOwner->frame->workspace;
else else
workspace = w_global.workspace.current; workspace = scr->current_workspace;
} }
} }
@@ -942,7 +943,7 @@ WWindow *wManageWindow(WScreen *scr, Window window)
y = win_state->state->y; y = win_state->state->y;
} else if ((wwin->transient_for == None || wPreferences.window_placement != WPM_MANUAL) } else if ((wwin->transient_for == None || wPreferences.window_placement != WPM_MANUAL)
&& !scr->flags.startup && !scr->flags.startup
&& workspace == w_global.workspace.current && workspace == scr->current_workspace
&& !wwin->flags.miniaturized && !wwin->flags.miniaturized
&& !wwin->flags.maximized && !(wwin->normal_hints->flags & (USPosition | PPosition))) { && !wwin->flags.maximized && !(wwin->normal_hints->flags & (USPosition | PPosition))) {
@@ -1183,7 +1184,7 @@ WWindow *wManageWindow(WScreen *scr, Window window)
XLowerWindow(dpy, window); XLowerWindow(dpy, window);
/* if window is in this workspace and should be mapped, then map it */ /* if window is in this workspace and should be mapped, then map it */
if (!wwin->flags.miniaturized && (workspace == w_global.workspace.current || IS_OMNIPRESENT(wwin)) if (!wwin->flags.miniaturized && (workspace == scr->current_workspace || IS_OMNIPRESENT(wwin))
&& !wwin->flags.hidden && !withdraw) { && !wwin->flags.hidden && !withdraw) {
/* The following "if" is to avoid crashing of clients that expect /* The following "if" is to avoid crashing of clients that expect
@@ -1257,7 +1258,7 @@ WWindow *wManageWindow(WScreen *scr, Window window)
/* Final preparations before window is ready to go */ /* Final preparations before window is ready to go */
wFrameWindowChangeState(wwin->frame, WS_UNFOCUSED); wFrameWindowChangeState(wwin->frame, WS_UNFOCUSED);
if (!wwin->flags.miniaturized && workspace == w_global.workspace.current && !wwin->flags.hidden) { if (!wwin->flags.miniaturized && workspace == scr->current_workspace && !wwin->flags.hidden) {
if (((transientOwner && transientOwner->flags.focused) if (((transientOwner && transientOwner->flags.focused)
|| wPreferences.auto_focus) && !WFLAGP(wwin, no_focusable)) { || wPreferences.auto_focus) && !WFLAGP(wwin, no_focusable)) {
@@ -1366,7 +1367,7 @@ WWindow *wManageInternalWindow(WScreen *scr, Window window, Window owner,
wFrameWindowHideButton(wwin->frame, WFF_RIGHT_BUTTON); wFrameWindowHideButton(wwin->frame, WFF_RIGHT_BUTTON);
wwin->frame->child = wwin; wwin->frame->child = wwin;
wwin->frame->workspace = w_global.workspace.current; wwin->frame->workspace = wwin->screen_ptr->current_workspace;
#ifdef XKB_BUTTON_HINT #ifdef XKB_BUTTON_HINT
if (wPreferences.modelock) if (wPreferences.modelock)
@@ -1921,10 +1922,10 @@ void wWindowChangeWorkspace(WWindow *wwin, int workspace)
WApplication *wapp; WApplication *wapp;
int unmap = 0; int unmap = 0;
if (workspace >= w_global.workspace.count || workspace < 0 || workspace == wwin->frame->workspace) if (workspace >= scr->workspace_count || workspace < 0 || workspace == wwin->frame->workspace)
return; return;
if (workspace != w_global.workspace.current) { if (workspace != scr->current_workspace) {
/* Sent to other workspace. Unmap window */ /* Sent to other workspace. Unmap window */
if ((wwin->flags.mapped if ((wwin->flags.mapped
|| wwin->flags.shaded || (wwin->flags.miniaturized && !wPreferences.sticky_icons)) || wwin->flags.shaded || (wwin->flags.miniaturized && !wPreferences.sticky_icons))
@@ -1968,23 +1969,23 @@ void wWindowChangeWorkspace(WWindow *wwin, int workspace)
void wWindowChangeWorkspaceRelative(WWindow *wwin, int amount) void wWindowChangeWorkspaceRelative(WWindow *wwin, int amount)
{ {
WScreen *scr = wwin->screen_ptr; WScreen *scr = wwin->screen_ptr;
int w = w_global.workspace.current + amount; int w = scr->current_workspace + amount;
if (amount < 0) { if (amount < 0) {
if (w >= 0) { if (w >= 0) {
wWindowChangeWorkspace(wwin, w); wWindowChangeWorkspace(wwin, w);
} else if (wPreferences.ws_cycle) { } else if (wPreferences.ws_cycle) {
wWindowChangeWorkspace(wwin, w_global.workspace.count + w); wWindowChangeWorkspace(wwin, scr->workspace_count + w);
} }
} else if (amount > 0) { } else if (amount > 0) {
if (w < w_global.workspace.count) { if (w < scr->workspace_count) {
wWindowChangeWorkspace(wwin, w); wWindowChangeWorkspace(wwin, w);
} else if (wPreferences.ws_advance) { } else if (wPreferences.ws_advance) {
int workspace = WMIN(w, MAX_WORKSPACES - 1); int workspace = WMIN(w, MAX_WORKSPACES - 1);
wWorkspaceMake(scr, workspace); wWorkspaceMake(scr, workspace);
wWindowChangeWorkspace(wwin, workspace); wWindowChangeWorkspace(wwin, workspace);
} else if (wPreferences.ws_cycle) { } else if (wPreferences.ws_cycle) {
wWindowChangeWorkspace(wwin, w % w_global.workspace.count); wWindowChangeWorkspace(wwin, w % scr->workspace_count);
} }
} }
} }
@@ -2351,8 +2352,8 @@ void wWindowSaveState(WWindow *wwin)
} }
for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) { for (i = 0; i < MAX_WINDOW_SHORTCUTS; i++) {
if (w_global.shortcut.windows[i] && if (wwin->screen_ptr->shortcutWindows[i] &&
WMCountInArray(w_global.shortcut.windows[i], wwin)) WMCountInArray(wwin->screen_ptr->shortcutWindows[i], wwin))
data[9] |= 1 << i; data[9] |= 1 << i;
} }
+37 -28
View File
@@ -279,7 +279,7 @@ static void switchWSCommand(WMenu * menu, WMenuEntry * entry)
wWindowChangeWorkspace(wwin, entry->order); wWindowChangeWorkspace(wwin, entry->order);
} }
static void makeShortcutCommand(WMenu *menu, WMenuEntry *entry) static void makeShortcutCommand(WMenu * menu, WMenuEntry * entry)
{ {
WWindow *wwin = (WWindow *) entry->clientdata; WWindow *wwin = (WWindow *) entry->clientdata;
WScreen *scr = wwin->screen_ptr; WScreen *scr = wwin->screen_ptr;
@@ -288,16 +288,18 @@ static void makeShortcutCommand(WMenu *menu, WMenuEntry *entry)
/* Parameter not used, but tell the compiler that it is ok */ /* Parameter not used, but tell the compiler that it is ok */
(void) menu; (void) menu;
if (w_global.shortcut.windows[index]) { if (scr->shortcutWindows[index]) {
WMFreeArray(w_global.shortcut.windows[index]); WMFreeArray(scr->shortcutWindows[index]);
w_global.shortcut.windows[index] = NULL; scr->shortcutWindows[index] = NULL;
} }
if (wwin->flags.selected && scr->selected_windows) { if (wwin->flags.selected && scr->selected_windows) {
w_global.shortcut.windows[index] = WMDuplicateArray(scr->selected_windows); scr->shortcutWindows[index] = WMDuplicateArray(scr->selected_windows);
/*WMRemoveFromArray(scr->shortcutWindows[index], wwin);
WMInsertInArray(scr->shortcutWindows[index], 0, wwin); */
} else { } else {
w_global.shortcut.windows[index] = WMCreateArray(4); scr->shortcutWindows[index] = WMCreateArray(4);
WMAddToArray(w_global.shortcut.windows[index], wwin); WMAddToArray(scr->shortcutWindows[index], wwin);
} }
wSelectWindow(wwin, !wwin->flags.selected); wSelectWindow(wwin, !wwin->flags.selected);
@@ -309,24 +311,25 @@ static void makeShortcutCommand(WMenu *menu, WMenuEntry *entry)
static void updateWorkspaceMenu(WMenu * menu) static void updateWorkspaceMenu(WMenu * menu)
{ {
WScreen *scr = menu->frame->screen_ptr;
char title[MAX_WORKSPACENAME_WIDTH + 1]; char title[MAX_WORKSPACENAME_WIDTH + 1];
WMenuEntry *entry; WMenuEntry *entry;
int i; int i;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (i < menu->entry_no) { if (i < menu->entry_no) {
entry = menu->entries[i]; entry = menu->entries[i];
if (strcmp(entry->text, w_global.workspace.array[i]->name) != 0) { if (strcmp(entry->text, scr->workspaces[i]->name) != 0) {
wfree(entry->text); wfree(entry->text);
strncpy(title, w_global.workspace.array[i]->name, MAX_WORKSPACENAME_WIDTH); strncpy(title, scr->workspaces[i]->name, MAX_WORKSPACENAME_WIDTH);
title[MAX_WORKSPACENAME_WIDTH] = 0; title[MAX_WORKSPACENAME_WIDTH] = 0;
menu->entries[i]->text = wstrdup(title); menu->entries[i]->text = wstrdup(title);
menu->entries[i]->rtext = GetShortcutKey(wKeyBindings[WKBD_MOVE_WORKSPACE1 + i]); menu->entries[i]->rtext = GetShortcutKey(wKeyBindings[WKBD_MOVE_WORKSPACE1 + i]);
menu->flags.realized = 0; menu->flags.realized = 0;
} }
} else { } else {
strncpy(title, w_global.workspace.array[i]->name, MAX_WORKSPACENAME_WIDTH); strncpy(title, scr->workspaces[i]->name, MAX_WORKSPACENAME_WIDTH);
title[MAX_WORKSPACENAME_WIDTH] = 0; title[MAX_WORKSPACENAME_WIDTH] = 0;
entry = wMenuAddCallback(menu, title, switchWSCommand, NULL); entry = wMenuAddCallback(menu, title, switchWSCommand, NULL);
@@ -336,7 +339,7 @@ static void updateWorkspaceMenu(WMenu * menu)
} }
/* workspace shortcut labels */ /* workspace shortcut labels */
if (i / 10 == w_global.workspace.current / 10) if (i / 10 == scr->current_workspace / 10)
entry->rtext = GetShortcutKey(wKeyBindings[WKBD_MOVE_WORKSPACE1 + (i % 10)]); entry->rtext = GetShortcutKey(wKeyBindings[WKBD_MOVE_WORKSPACE1 + (i % 10)]);
else else
entry->rtext = NULL; entry->rtext = NULL;
@@ -346,7 +349,7 @@ static void updateWorkspaceMenu(WMenu * menu)
wMenuRealize(menu); wMenuRealize(menu);
} }
static void updateMakeShortcutMenu(WMenu *menu, WWindow *wwin) static void updateMakeShortcutMenu(WMenu * menu, WWindow * wwin)
{ {
WMenu *smenu = menu->cascades[menu->entries[MC_OPTIONS]->cascade]; WMenu *smenu = menu->cascades[menu->entries[MC_OPTIONS]->cascade];
int i; int i;
@@ -363,7 +366,7 @@ static void updateMakeShortcutMenu(WMenu *menu, WWindow *wwin)
for (i = WO_ENTRIES; i < smenu->entry_no; i++) { for (i = WO_ENTRIES; i < smenu->entry_no; i++) {
int shortcutNo = i - WO_ENTRIES; int shortcutNo = i - WO_ENTRIES;
WMenuEntry *entry = smenu->entries[i]; WMenuEntry *entry = smenu->entries[i];
WMArray *shortSelWindows = w_global.shortcut.windows[shortcutNo]; WMArray *shortSelWindows = wwin->screen_ptr->shortcutWindows[shortcutNo];
snprintf(buffer, buflen, "%s %i", _("Set Shortcut"), shortcutNo + 1); snprintf(buffer, buflen, "%s %i", _("Set Shortcut"), shortcutNo + 1);
@@ -478,7 +481,7 @@ static WMenu *makeWorkspaceMenu(WScreen * scr)
return menu; return menu;
} }
static WMenu *makeMakeShortcutMenu(WMenu *menu) static WMenu *makeMakeShortcutMenu(WMenu * menu)
{ {
int i; int i;
@@ -562,15 +565,20 @@ static WMenu *createWindowMenu(WScreen * scr)
entry = wMenuAddCallback(menu, _("Select"), execMenuCommand, NULL); entry = wMenuAddCallback(menu, _("Select"), execMenuCommand, NULL);
entry = wMenuAddCallback(menu, _("Move To"), NULL, NULL); entry = wMenuAddCallback(menu, _("Move To"), NULL, NULL);
w_global.workspace.submenu = makeWorkspaceMenu(scr); scr->workspace_submenu = makeWorkspaceMenu(scr);
if (w_global.workspace.submenu) if (scr->workspace_submenu)
wMenuEntrySetCascade(menu, entry, w_global.workspace.submenu); wMenuEntrySetCascade(menu, entry, scr->workspace_submenu);
entry = wMenuAddCallback(menu, _("Attributes..."), execMenuCommand, NULL); entry = wMenuAddCallback(menu, _("Attributes..."), execMenuCommand, NULL);
entry = wMenuAddCallback(menu, _("Options"), NULL, NULL); entry = wMenuAddCallback(menu, _("Options"), NULL, NULL);
wMenuEntrySetCascade(menu, entry, makeMakeShortcutMenu(makeOptionsMenu(scr))); wMenuEntrySetCascade(menu, entry, makeMakeShortcutMenu(makeOptionsMenu(scr)));
/*
entry = wMenuAddCallback(menu, _("Select Shortcut"), NULL, NULL);
wMenuEntrySetCascade(menu, entry, makeMakeShortcutMenu(scr));
*/
entry = wMenuAddCallback(menu, _("Launch"), execMenuCommand, NULL); entry = wMenuAddCallback(menu, _("Launch"), execMenuCommand, NULL);
entry = wMenuAddCallback(menu, _("Close"), execMenuCommand, NULL); entry = wMenuAddCallback(menu, _("Close"), execMenuCommand, NULL);
@@ -598,6 +606,7 @@ void CloseWindowMenu(WScreen * scr)
static void updateMenuForWindow(WMenu * menu, WWindow * wwin) static void updateMenuForWindow(WMenu * menu, WWindow * wwin)
{ {
WApplication *wapp = wApplicationOf(wwin->main_window); WApplication *wapp = wApplicationOf(wwin->main_window);
WScreen *scr = wwin->screen_ptr;
int i; int i;
updateOptionsMenu(menu, wwin); updateOptionsMenu(menu, wwin);
@@ -700,13 +709,12 @@ static void updateMenuForWindow(WMenu * menu, WWindow * wwin)
menu->entries[i]->clientdata = wwin; menu->entries[i]->clientdata = wwin;
} }
for (i = 0; i < w_global.workspace.submenu->entry_no; i++) { for (i = 0; i < scr->workspace_submenu->entry_no; i++) {
w_global.workspace.submenu->entries[i]->clientdata = wwin; scr->workspace_submenu->entries[i]->clientdata = wwin;
if (i == scr->current_workspace)
if (i == w_global.workspace.current) wMenuSetEnabled(scr->workspace_submenu, i, False);
wMenuSetEnabled(w_global.workspace.submenu, i, False);
else else
wMenuSetEnabled(w_global.workspace.submenu, i, True); wMenuSetEnabled(scr->workspace_submenu, i, True);
} }
menu->flags.realized = 0; menu->flags.realized = 0;
@@ -729,7 +737,7 @@ static WMenu *open_window_menu_core(WWindow *wwin)
wfree(scr->window_menu->entries[MC_SHADE]->text); wfree(scr->window_menu->entries[MC_SHADE]->text);
wfree(scr->window_menu->entries[MC_SELECT]->text); wfree(scr->window_menu->entries[MC_SELECT]->text);
} else { } else {
updateWorkspaceMenu(w_global.workspace.submenu); updateWorkspaceMenu(scr->workspace_submenu);
} }
menu = scr->window_menu; menu = scr->window_menu;
@@ -782,15 +790,16 @@ void OpenWindowMenu2(WWindow *wwin, int x, int y, int keyboard)
{ {
int i; int i;
WMenu *menu; WMenu *menu;
WScreen *scr = wwin->screen_ptr;
menu = open_window_menu_core(wwin); menu = open_window_menu_core(wwin);
if (!menu) if (!menu)
return; return;
/* Specific menu position */ /* Specific menu position */
for (i = 0; i < w_global.workspace.submenu->entry_no; i++) { for (i = 0; i < scr->workspace_submenu->entry_no; i++) {
w_global.workspace.submenu->entries[i]->clientdata = wwin; scr->workspace_submenu->entries[i]->clientdata = wwin;
wMenuSetEnabled(w_global.workspace.submenu, i, True); wMenuSetEnabled(scr->workspace_submenu, i, True);
} }
x -= menu->frame->core->width / 2; x -= menu->frame->core->width / 2;
+9 -8
View File
@@ -499,8 +499,8 @@ static void saveSettings(WMWidget *button, void *client_data)
} }
i = WMGetPopUpButtonSelectedItem(panel->wsP) - 1; i = WMGetPopUpButtonSelectedItem(panel->wsP) - 1;
if (i >= 0 && i < w_global.workspace.count) { if (i >= 0 && i < panel->frame->screen_ptr->workspace_count) {
value = WMCreatePLString(w_global.workspace.array[i]->name); value = WMCreatePLString(panel->frame->screen_ptr->workspaces[i]->name);
different |= insertAttribute(dict, winDic, AStartWorkspace, value, flags); different |= insertAttribute(dict, winDic, AStartWorkspace, value, flags);
WMReleasePropList(value); WMReleasePropList(value);
} }
@@ -938,9 +938,9 @@ static void revertSettings(WMWidget *button, void *client_data)
showIconFor(WMWidgetScreen(panel->alwChk), panel, wm_instance, wm_class, REVERT_TO_DEFAULT); showIconFor(WMWidgetScreen(panel->alwChk), panel, wm_instance, wm_class, REVERT_TO_DEFAULT);
n = wDefaultGetStartWorkspace(wm_instance, wm_class); n = wDefaultGetStartWorkspace(wwin->screen_ptr, wm_instance, wm_class);
if (n >= 0 && n < w_global.workspace.count) if (n >= 0 && n < wwin->screen_ptr->workspace_count)
WMSetPopUpButtonSelectedItem(panel->wsP, n + 1); WMSetPopUpButtonSelectedItem(panel->wsP, n + 1);
else else
WMSetPopUpButtonSelectedItem(panel->wsP, 0); WMSetPopUpButtonSelectedItem(panel->wsP, 0);
@@ -1484,6 +1484,7 @@ static void create_tab_window_advanced(WWindow *wwin, InspectorPanel *panel, int
static void create_tab_icon_workspace(WWindow *wwin, InspectorPanel *panel) static void create_tab_icon_workspace(WWindow *wwin, InspectorPanel *panel)
{ {
WScreen *scr = wwin->screen_ptr;
int i = 0; int i = 0;
/* miniwindow/workspace */ /* miniwindow/workspace */
@@ -1534,11 +1535,11 @@ static void create_tab_icon_workspace(WWindow *wwin, InspectorPanel *panel)
WMResizeWidget(panel->wsP, PWIDTH - (2 * 15) - (2 * 20), 20); WMResizeWidget(panel->wsP, PWIDTH - (2 * 15) - (2 * 20), 20);
WMAddPopUpButtonItem(panel->wsP, _("Nowhere in particular")); WMAddPopUpButtonItem(panel->wsP, _("Nowhere in particular"));
for (i = 0; i < w_global.workspace.count; i++) for (i = 0; i < wwin->screen_ptr->workspace_count; i++)
WMAddPopUpButtonItem(panel->wsP, w_global.workspace.array[i]->name); WMAddPopUpButtonItem(panel->wsP, scr->workspaces[i]->name);
i = wDefaultGetStartWorkspace(wwin->wm_instance, wwin->wm_class); i = wDefaultGetStartWorkspace(wwin->screen_ptr, wwin->wm_instance, wwin->wm_class);
if (i >= 0 && i <= w_global.workspace.count) if (i >= 0 && i <= wwin->screen_ptr->workspace_count)
WMSetPopUpButtonSelectedItem(panel->wsP, i + 1); WMSetPopUpButtonSelectedItem(panel->wsP, i + 1);
else else
WMSetPopUpButtonSelectedItem(panel->wsP, 0); WMSetPopUpButtonSelectedItem(panel->wsP, 0);
+18 -18
View File
@@ -337,15 +337,15 @@ void wNETWMUpdateDesktop(WScreen *scr)
long *views, sizes[2]; long *views, sizes[2];
int count, i; int count, i;
if (w_global.workspace.count == 0) if (scr->workspace_count == 0)
return; return;
count = w_global.workspace.count * 2; count = scr->workspace_count * 2;
views = wmalloc(sizeof(long) * count); views = wmalloc(sizeof(long) * count);
sizes[0] = scr->scr_width; sizes[0] = scr->scr_width;
sizes[1] = scr->scr_height; sizes[1] = scr->scr_height;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
views[2 * i + 0] = 0; views[2 * i + 0] = 0;
views[2 * i + 1] = 0; views[2 * i + 1] = 0;
} }
@@ -558,13 +558,13 @@ static void wNETWMShowingDesktop(WScreen *scr, Bool show)
updateShowDesktop(scr, True); updateShowDesktop(scr, True);
} else if (scr->netdata->show_desktop != NULL) { } else if (scr->netdata->show_desktop != NULL) {
/* FIXME: get rid of workspace flashing ! */ /* FIXME: get rid of workspace flashing ! */
int ws = w_global.workspace.current; int ws = scr->current_workspace;
WWindow **tmp; WWindow **tmp;
for (tmp = scr->netdata->show_desktop; *tmp; ++tmp) { for (tmp = scr->netdata->show_desktop; *tmp; ++tmp) {
wDeiconifyWindow(*tmp); wDeiconifyWindow(*tmp);
(*tmp)->flags.net_show_desktop = 0; (*tmp)->flags.net_show_desktop = 0;
} }
if (ws != w_global.workspace.current) if (ws != scr->current_workspace)
wWorkspaceChange(scr, ws); wWorkspaceChange(scr, ws);
wfree(scr->netdata->show_desktop); wfree(scr->netdata->show_desktop);
scr->netdata->show_desktop = NULL; scr->netdata->show_desktop = NULL;
@@ -689,13 +689,13 @@ void wNETWMUpdateWorkarea(WScreen *scr)
long *area; long *area;
int count, i; int count, i;
if (!scr->netdata || w_global.workspace.count == 0 || !scr->usableArea) if (!scr->netdata || scr->workspace_count == 0 || !scr->usableArea)
return; return;
count = w_global.workspace.count * 4; count = scr->workspace_count * 4;
area = wmalloc(sizeof(long) * count); area = wmalloc(sizeof(long) * count);
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
area[4 * i + 0] = scr->usableArea[0].x1; area[4 * i + 0] = scr->usableArea[0].x1;
area[4 * i + 1] = scr->usableArea[0].y1; area[4 * i + 1] = scr->usableArea[0].y1;
area[4 * i + 2] = scr->usableArea[0].x2 - scr->usableArea[0].x1; area[4 * i + 2] = scr->usableArea[0].x2 - scr->usableArea[0].x1;
@@ -808,7 +808,7 @@ static void updateWorkspaceCount(WScreen *scr)
{ /* changeable */ { /* changeable */
long count; long count;
count = w_global.workspace.count; count = scr->workspace_count;
XChangeProperty(dpy, scr->root_win, net_number_of_desktops, XA_CARDINAL, XChangeProperty(dpy, scr->root_win, net_number_of_desktops, XA_CARDINAL,
32, PropModeReplace, (unsigned char *)&count, 1); 32, PropModeReplace, (unsigned char *)&count, 1);
@@ -818,7 +818,7 @@ static void updateCurrentWorkspace(WScreen *scr)
{ /* changeable */ { /* changeable */
long count; long count;
count = w_global.workspace.current; count = scr->current_workspace;
XChangeProperty(dpy, scr->root_win, net_current_desktop, XA_CARDINAL, 32, XChangeProperty(dpy, scr->root_win, net_current_desktop, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&count, 1); PropModeReplace, (unsigned char *)&count, 1);
@@ -831,9 +831,9 @@ static void updateWorkspaceNames(WScreen *scr)
pos = buf; pos = buf;
len = 0; len = 0;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
curr_size = strlen(w_global.workspace.array[i]->name); curr_size = strlen(scr->workspaces[i]->name);
strcpy(pos, w_global.workspace.array[i]->name); strcpy(pos, scr->workspaces[i]->name);
pos += (curr_size + 1); pos += (curr_size + 1);
len += (curr_size + 1); len += (curr_size + 1);
} }
@@ -1489,13 +1489,13 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
long value; long value;
value = event->data.l[0]; value = event->data.l[0];
if (value > w_global.workspace.count) { if (value > scr->workspace_count) {
wWorkspaceMake(scr, value - w_global.workspace.count); wWorkspaceMake(scr, value - scr->workspace_count);
} else if (value < w_global.workspace.count) { } else if (value < scr->workspace_count) {
int i; int i;
Bool rebuild = False; Bool rebuild = False;
for (i = w_global.workspace.count - 1; i >= value; i--) { for (i = scr->workspace_count - 1; i >= value; i--) {
if (!wWorkspaceDelete(scr, i)) { if (!wWorkspaceDelete(scr, i)) {
rebuild = True; rebuild = True;
break; break;
@@ -1531,7 +1531,7 @@ Bool wNETWMProcessClientMessage(XClientMessageEvent *event)
* - giving the client the focus does not cause a change in * - giving the client the focus does not cause a change in
* the active workspace (XXX: or the active head if Xinerama) * the active workspace (XXX: or the active head if Xinerama)
*/ */
if (wwin->frame->workspace == w_global.workspace.current /* No workspace change */ if (wwin->frame->workspace == wwin->screen_ptr->current_workspace /* No workspace change */
|| event->data.l[0] == 2 /* Requested by pager */ || event->data.l[0] == 2 /* Requested by pager */
|| WFLAGP(wwin, focus_across_wksp) /* Explicitly allowed */) { || WFLAGP(wwin, focus_across_wksp) /* Explicitly allowed */) {
wNETWMShowingDesktop(scr, False); wNETWMShowingDesktop(scr, False);
+121 -122
View File
@@ -59,7 +59,6 @@
#define MAX_SHORTCUT_LENGTH 32 #define MAX_SHORTCUT_LENGTH 32
#define WORKSPACE_NAME_DISPLAY_PADDING 32 #define WORKSPACE_NAME_DISPLAY_PADDING 32
static WMPropList *dWorkspaces = NULL; static WMPropList *dWorkspaces = NULL;
static WMPropList *dClip, *dName; static WMPropList *dClip, *dName;
@@ -86,8 +85,8 @@ int wWorkspaceNew(WScreen *scr)
WWorkspace *wspace, **list; WWorkspace *wspace, **list;
int i; int i;
if (w_global.workspace.count < MAX_WORKSPACES) { if (scr->workspace_count < MAX_WORKSPACES) {
w_global.workspace.count++; scr->workspace_count++;
wspace = wmalloc(sizeof(WWorkspace)); wspace = wmalloc(sizeof(WWorkspace));
wspace->name = NULL; wspace->name = NULL;
@@ -102,30 +101,30 @@ int wWorkspaceNew(WScreen *scr)
name_length = strlen(new_name) + 8; name_length = strlen(new_name) + 8;
} }
wspace->name = wmalloc(name_length); wspace->name = wmalloc(name_length);
snprintf(wspace->name, name_length, new_name, w_global.workspace.count); snprintf(wspace->name, name_length, new_name, scr->workspace_count);
} }
if (!wPreferences.flags.noclip) if (!wPreferences.flags.noclip)
wspace->clip = wDockCreate(scr, WM_CLIP, NULL); wspace->clip = wDockCreate(scr, WM_CLIP, NULL);
list = wmalloc(sizeof(WWorkspace *) * w_global.workspace.count); list = wmalloc(sizeof(WWorkspace *) * scr->workspace_count);
for (i = 0; i < w_global.workspace.count - 1; i++) for (i = 0; i < scr->workspace_count - 1; i++)
list[i] = w_global.workspace.array[i]; list[i] = scr->workspaces[i];
list[i] = wspace; list[i] = wspace;
if (w_global.workspace.array) if (scr->workspaces)
wfree(w_global.workspace.array); wfree(scr->workspaces);
w_global.workspace.array = list; scr->workspaces = list;
wWorkspaceMenuUpdate(w_global.workspace.menu); wWorkspaceMenuUpdate(scr, scr->workspace_menu);
wWorkspaceMenuUpdate(w_global.clip.ws_menu); wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
wNETWMUpdateDesktop(scr); wNETWMUpdateDesktop(scr);
WMPostNotificationName(WMNWorkspaceCreated, scr, (void *)(uintptr_t) (w_global.workspace.count - 1)); WMPostNotificationName(WMNWorkspaceCreated, scr, (void *)(uintptr_t) (scr->workspace_count - 1));
XFlush(dpy); XFlush(dpy);
return w_global.workspace.count - 1; return scr->workspace_count - 1;
} }
return -1; return -1;
@@ -149,56 +148,56 @@ Bool wWorkspaceDelete(WScreen * scr, int workspace)
} }
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
wDockDestroy(w_global.workspace.array[workspace]->clip); wDockDestroy(scr->workspaces[workspace]->clip);
w_global.workspace.array[workspace]->clip = NULL; scr->workspaces[workspace]->clip = NULL;
} }
list = wmalloc(sizeof(WWorkspace *) * (w_global.workspace.count - 1)); list = wmalloc(sizeof(WWorkspace *) * (scr->workspace_count - 1));
j = 0; j = 0;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (i != workspace) { if (i != workspace) {
list[j++] = w_global.workspace.array[i]; list[j++] = scr->workspaces[i];
} else { } else {
if (w_global.workspace.array[i]->name) if (scr->workspaces[i]->name)
wfree(w_global.workspace.array[i]->name); wfree(scr->workspaces[i]->name);
wfree(w_global.workspace.array[i]); wfree(scr->workspaces[i]);
} }
} }
wfree(w_global.workspace.array); wfree(scr->workspaces);
w_global.workspace.array = list; scr->workspaces = list;
w_global.workspace.count--; scr->workspace_count--;
/* update menu */ /* update menu */
wWorkspaceMenuUpdate(w_global.workspace.menu); wWorkspaceMenuUpdate(scr, scr->workspace_menu);
/* clip workspace menu */ /* clip workspace menu */
wWorkspaceMenuUpdate(w_global.clip.ws_menu); wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
/* update also window menu */ /* update also window menu */
if (w_global.workspace.submenu) { if (scr->workspace_submenu) {
WMenu *menu = w_global.workspace.submenu; WMenu *menu = scr->workspace_submenu;
i = menu->entry_no; i = menu->entry_no;
while (i > w_global.workspace.count) while (i > scr->workspace_count)
wMenuRemoveItem(menu, --i); wMenuRemoveItem(menu, --i);
wMenuRealize(menu); wMenuRealize(menu);
} }
/* and clip menu */ /* and clip menu */
if (w_global.clip.submenu) { if (scr->clip_submenu) {
WMenu *menu = w_global.clip.submenu; WMenu *menu = scr->clip_submenu;
i = menu->entry_no; i = menu->entry_no;
while (i > w_global.workspace.count) while (i > scr->workspace_count)
wMenuRemoveItem(menu, --i); wMenuRemoveItem(menu, --i);
wMenuRealize(menu); wMenuRealize(menu);
} }
wNETWMUpdateDesktop(scr); wNETWMUpdateDesktop(scr);
WMPostNotificationName(WMNWorkspaceDestroyed, scr, (void *)(uintptr_t) (w_global.workspace.count - 1)); WMPostNotificationName(WMNWorkspaceDestroyed, scr, (void *)(uintptr_t) (scr->workspace_count - 1));
if (w_global.workspace.current >= w_global.workspace.count) if (scr->current_workspace >= scr->workspace_count)
wWorkspaceChange(scr, w_global.workspace.count - 1); wWorkspaceChange(scr, scr->workspace_count - 1);
if (w_global.workspace.last_used >= w_global.workspace.count) if (scr->last_workspace >= scr->workspace_count)
w_global.workspace.last_used = 0; scr->last_workspace = 0;
return True; return True;
} }
@@ -255,7 +254,7 @@ static void showWorkspaceName(WScreen * scr, int workspace)
Pixmap text, mask; Pixmap text, mask;
int w, h; int w, h;
int px, py; int px, py;
char *name = w_global.workspace.array[workspace]->name; char *name = scr->workspaces[workspace]->name;
int len = strlen(name); int len = strlen(name);
int x, y; int x, y;
#ifdef USE_XINERAMA #ifdef USE_XINERAMA
@@ -264,7 +263,7 @@ static void showWorkspaceName(WScreen * scr, int workspace)
int xx, yy; int xx, yy;
#endif #endif
if (wPreferences.workspace_name_display_position == WD_NONE || w_global.workspace.count < 2) if (wPreferences.workspace_name_display_position == WD_NONE || scr->workspace_count < 2)
return; return;
if (scr->workspace_name_timer) { if (scr->workspace_name_timer) {
@@ -283,8 +282,8 @@ static void showWorkspaceName(WScreen * scr, int workspace)
data = wmalloc(sizeof(WorkspaceNameData)); data = wmalloc(sizeof(WorkspaceNameData));
data->back = NULL; data->back = NULL;
w = WMWidthOfString(w_global.workspace.font_for_name, name, len); w = WMWidthOfString(scr->workspace_name_font, name, len);
h = WMFontHeight(w_global.workspace.font_for_name); h = WMFontHeight(scr->workspace_name_font);
#ifdef USE_XINERAMA #ifdef USE_XINERAMA
head = wGetHeadForPointerLocation(scr); head = wGetHeadForPointerLocation(scr);
@@ -356,7 +355,7 @@ static void showWorkspaceName(WScreen * scr, int workspace)
for (x = 0; x <= 4; x++) for (x = 0; x <= 4; x++)
for (y = 0; y <= 4; y++) for (y = 0; y <= 4; y++)
WMDrawString(scr->wmscreen, text, scr->white, w_global.workspace.font_for_name, x, y, name, len); WMDrawString(scr->wmscreen, text, scr->white, scr->workspace_name_font, x, y, name, len);
XSetForeground(dpy, scr->mono_gc, 1); XSetForeground(dpy, scr->mono_gc, 1);
XSetBackground(dpy, scr->mono_gc, 0); XSetBackground(dpy, scr->mono_gc, 0);
@@ -368,7 +367,7 @@ static void showWorkspaceName(WScreen * scr, int workspace)
XFillRectangle(dpy, text, WMColorGC(scr->black), 0, 0, w + 4, h + 4); XFillRectangle(dpy, text, WMColorGC(scr->black), 0, 0, w + 4, h + 4);
WMDrawString(scr->wmscreen, text, scr->white, w_global.workspace.font_for_name, 2, 2, name, len); WMDrawString(scr->wmscreen, text, scr->white, scr->workspace_name_font, 2, 2, name, len);
#ifdef USE_XSHAPE #ifdef USE_XSHAPE
if (w_global.xext.shape.supported) if (w_global.xext.shape.supported)
@@ -433,7 +432,7 @@ void wWorkspaceChange(WScreen *scr, int workspace)
if (scr->flags.startup || scr->flags.startup2 || scr->flags.ignore_focus_events) if (scr->flags.startup || scr->flags.startup2 || scr->flags.ignore_focus_events)
return; return;
if (workspace != w_global.workspace.current) if (workspace != scr->current_workspace)
wWorkspaceForceChange(scr, workspace); wWorkspaceForceChange(scr, workspace);
} }
@@ -445,24 +444,24 @@ void wWorkspaceRelativeChange(WScreen * scr, int amount)
* still "flying" to its final position and we don't want to * still "flying" to its final position and we don't want to
* change workspace before the animation finishes, otherwise * change workspace before the animation finishes, otherwise
* the window will land in the new workspace */ * the window will land in the new workspace */
if (w_global.workspace.ignore_change) if (w_global.ignore_workspace_change)
return; return;
w = w_global.workspace.current + amount; w = scr->current_workspace + amount;
if (amount < 0) { if (amount < 0) {
if (w >= 0) { if (w >= 0) {
wWorkspaceChange(scr, w); wWorkspaceChange(scr, w);
} else if (wPreferences.ws_cycle) { } else if (wPreferences.ws_cycle) {
wWorkspaceChange(scr, w_global.workspace.count + w); wWorkspaceChange(scr, scr->workspace_count + w);
} }
} else if (amount > 0) { } else if (amount > 0) {
if (w < w_global.workspace.count) { if (w < scr->workspace_count) {
wWorkspaceChange(scr, w); wWorkspaceChange(scr, w);
} else if (wPreferences.ws_advance) { } else if (wPreferences.ws_advance) {
wWorkspaceChange(scr, WMIN(w, MAX_WORKSPACES - 1)); wWorkspaceChange(scr, WMIN(w, MAX_WORKSPACES - 1));
} else if (wPreferences.ws_cycle) { } else if (wPreferences.ws_cycle) {
wWorkspaceChange(scr, w % w_global.workspace.count); wWorkspaceChange(scr, w % scr->workspace_count);
} }
} }
} }
@@ -476,17 +475,17 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
SendHelperMessage(scr, 'C', workspace + 1, NULL); SendHelperMessage(scr, 'C', workspace + 1, NULL);
if (workspace > w_global.workspace.count - 1) if (workspace > scr->workspace_count - 1)
wWorkspaceMake(scr, workspace - w_global.workspace.count + 1); wWorkspaceMake(scr, workspace - scr->workspace_count + 1);
wClipUpdateForWorkspaceChange(scr, workspace); wClipUpdateForWorkspaceChange(scr, workspace);
w_global.workspace.last_used = w_global.workspace.current; scr->last_workspace = scr->current_workspace;
w_global.workspace.current = workspace; scr->current_workspace = workspace;
wWorkspaceMenuUpdate(w_global.workspace.menu); wWorkspaceMenuUpdate(scr, scr->workspace_menu);
wWorkspaceMenuUpdate(w_global.clip.ws_menu); wWorkspaceMenuUpdate(scr, scr->clip_ws_menu);
if ((tmp = scr->focused_window) != NULL) { if ((tmp = scr->focused_window) != NULL) {
WWindow **toUnmap; WWindow **toUnmap;
@@ -622,14 +621,14 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
if (scr->dock) if (scr->dock)
wAppIconPaint(scr->dock->icon_array[0]); wAppIconPaint(scr->dock->icon_array[0]);
if (!wPreferences.flags.noclip && (w_global.workspace.array[workspace]->clip->auto_collapse || if (!wPreferences.flags.noclip && (scr->workspaces[workspace]->clip->auto_collapse ||
w_global.workspace.array[workspace]->clip->auto_raise_lower)) { scr->workspaces[workspace]->clip->auto_raise_lower)) {
/* to handle enter notify. This will also */ /* to handle enter notify. This will also */
XUnmapWindow(dpy, w_global.clip.icon->icon->core->window); XUnmapWindow(dpy, scr->clip_icon->icon->core->window);
XMapWindow(dpy, w_global.clip.icon->icon->core->window); XMapWindow(dpy, scr->clip_icon->icon->core->window);
} }
else if (w_global.clip.icon != NULL) { else if (scr->clip_icon != NULL) {
wClipIconPaint(); wClipIconPaint(scr->clip_icon);
} }
wScreenUpdateUsableArea(scr); wScreenUpdateUsableArea(scr);
wNETWMUpdateDesktop(scr); wNETWMUpdateDesktop(scr);
@@ -650,7 +649,7 @@ static void lastWSCommand(WMenu *menu, WMenuEntry *entry)
/* Parameter not used, but tell the compiler that it is ok */ /* Parameter not used, but tell the compiler that it is ok */
(void) entry; (void) entry;
wWorkspaceChange(menu->frame->screen_ptr, w_global.workspace.last_used); wWorkspaceChange(menu->frame->screen_ptr, menu->frame->screen_ptr->last_workspace);
} }
static void deleteWSCommand(WMenu *menu, WMenuEntry *entry) static void deleteWSCommand(WMenu *menu, WMenuEntry *entry)
@@ -658,7 +657,7 @@ static void deleteWSCommand(WMenu *menu, WMenuEntry *entry)
/* Parameter not used, but tell the compiler that it is ok */ /* Parameter not used, but tell the compiler that it is ok */
(void) entry; (void) entry;
wWorkspaceDelete(menu->frame->screen_ptr, w_global.workspace.count - 1); wWorkspaceDelete(menu->frame->screen_ptr, menu->frame->screen_ptr->workspace_count - 1);
} }
static void newWSCommand(WMenu *menu, WMenuEntry *foo) static void newWSCommand(WMenu *menu, WMenuEntry *foo)
@@ -680,7 +679,7 @@ void wWorkspaceRename(WScreen *scr, int workspace, const char *name)
char buf[MAX_WORKSPACENAME_WIDTH + 1]; char buf[MAX_WORKSPACENAME_WIDTH + 1];
char *tmp; char *tmp;
if (workspace >= w_global.workspace.count) if (workspace >= scr->workspace_count)
return; return;
/* trim white spaces */ /* trim white spaces */
@@ -695,26 +694,26 @@ void wWorkspaceRename(WScreen *scr, int workspace, const char *name)
wfree(tmp); wfree(tmp);
/* update workspace */ /* update workspace */
wfree(w_global.workspace.array[workspace]->name); wfree(scr->workspaces[workspace]->name);
w_global.workspace.array[workspace]->name = wstrdup(buf); scr->workspaces[workspace]->name = wstrdup(buf);
if (w_global.clip.ws_menu) { if (scr->clip_ws_menu) {
if (strcmp(w_global.clip.ws_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) { if (strcmp(scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) {
wfree(w_global.clip.ws_menu->entries[workspace + MC_WORKSPACE1]->text); wfree(scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text);
w_global.clip.ws_menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf); scr->clip_ws_menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf);
wMenuRealize(w_global.clip.ws_menu); wMenuRealize(scr->clip_ws_menu);
} }
} }
if (w_global.workspace.menu) { if (scr->workspace_menu) {
if (strcmp(w_global.workspace.menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) { if (strcmp(scr->workspace_menu->entries[workspace + MC_WORKSPACE1]->text, buf) != 0) {
wfree(w_global.workspace.menu->entries[workspace + MC_WORKSPACE1]->text); wfree(scr->workspace_menu->entries[workspace + MC_WORKSPACE1]->text);
w_global.workspace.menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf); scr->workspace_menu->entries[workspace + MC_WORKSPACE1]->text = wstrdup(buf);
wMenuRealize(w_global.workspace.menu); wMenuRealize(scr->workspace_menu);
} }
} }
if (w_global.clip.icon) if (scr->clip_icon)
wClipIconPaint(); wClipIconPaint(scr->clip_icon);
WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) workspace); WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) workspace);
} }
@@ -751,7 +750,7 @@ WMenu *wWorkspaceMenuMake(WScreen * scr, Bool titled)
return wsmenu; return wsmenu;
} }
void wWorkspaceMenuUpdate(WMenu *menu) void wWorkspaceMenuUpdate(WScreen * scr, WMenu * menu)
{ {
int i; int i;
long ws; long ws;
@@ -762,12 +761,12 @@ void wWorkspaceMenuUpdate(WMenu *menu)
if (!menu) if (!menu)
return; return;
if (menu->entry_no < w_global.workspace.count + MC_WORKSPACE1) { if (menu->entry_no < scr->workspace_count + MC_WORKSPACE1) {
/* new workspace(s) added */ /* new workspace(s) added */
i = w_global.workspace.count - (menu->entry_no - MC_WORKSPACE1); i = scr->workspace_count - (menu->entry_no - MC_WORKSPACE1);
ws = menu->entry_no - MC_WORKSPACE1; ws = menu->entry_no - MC_WORKSPACE1;
while (i > 0) { while (i > 0) {
wstrlcpy(title, w_global.workspace.array[ws]->name, MAX_WORKSPACENAME_WIDTH); wstrlcpy(title, scr->workspaces[ws]->name, MAX_WORKSPACENAME_WIDTH);
entry = wMenuAddCallback(menu, title, switchWSCommand, (void *)ws); entry = wMenuAddCallback(menu, title, switchWSCommand, (void *)ws);
entry->flags.indicator = 1; entry->flags.indicator = 1;
@@ -776,32 +775,32 @@ void wWorkspaceMenuUpdate(WMenu *menu)
i--; i--;
ws++; ws++;
} }
} else if (menu->entry_no > w_global.workspace.count + MC_WORKSPACE1) { } else if (menu->entry_no > scr->workspace_count + MC_WORKSPACE1) {
/* removed workspace(s) */ /* removed workspace(s) */
for (i = menu->entry_no - 1; i >= w_global.workspace.count + MC_WORKSPACE1; i--) for (i = menu->entry_no - 1; i >= scr->workspace_count + MC_WORKSPACE1; i--)
wMenuRemoveItem(menu, i); wMenuRemoveItem(menu, i);
} }
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
/* workspace shortcut labels */ /* workspace shortcut labels */
if (i / 10 == w_global.workspace.current / 10) if (i / 10 == scr->current_workspace / 10)
menu->entries[i + MC_WORKSPACE1]->rtext = GetShortcutKey(wKeyBindings[WKBD_WORKSPACE1 + (i % 10)]); menu->entries[i + MC_WORKSPACE1]->rtext = GetShortcutKey(wKeyBindings[WKBD_WORKSPACE1 + (i % 10)]);
else else
menu->entries[i + MC_WORKSPACE1]->rtext = NULL; menu->entries[i + MC_WORKSPACE1]->rtext = NULL;
menu->entries[i + MC_WORKSPACE1]->flags.indicator_on = 0; menu->entries[i + MC_WORKSPACE1]->flags.indicator_on = 0;
} }
menu->entries[w_global.workspace.current + MC_WORKSPACE1]->flags.indicator_on = 1; menu->entries[scr->current_workspace + MC_WORKSPACE1]->flags.indicator_on = 1;
wMenuRealize(menu); wMenuRealize(menu);
/* don't let user destroy current workspace */ /* don't let user destroy current workspace */
if (w_global.workspace.current == w_global.workspace.count - 1) if (scr->current_workspace == scr->workspace_count - 1)
wMenuSetEnabled(menu, MC_DESTROY_LAST, False); wMenuSetEnabled(menu, MC_DESTROY_LAST, False);
else else
wMenuSetEnabled(menu, MC_DESTROY_LAST, True); wMenuSetEnabled(menu, MC_DESTROY_LAST, True);
/* back to last workspace */ /* back to last workspace */
if (w_global.workspace.count && w_global.workspace.last_used != w_global.workspace.current) if (scr->workspace_count && scr->last_workspace != scr->current_workspace)
wMenuSetEnabled(menu, MC_LAST_USED, True); wMenuSetEnabled(menu, MC_LAST_USED, True);
else else
wMenuSetEnabled(menu, MC_LAST_USED, False); wMenuSetEnabled(menu, MC_LAST_USED, False);
@@ -814,7 +813,7 @@ void wWorkspaceMenuUpdate(WMenu *menu)
wMenuPaint(menu); wMenuPaint(menu);
} }
void wWorkspaceSaveState(WMPropList * old_state) void wWorkspaceSaveState(WScreen * scr, WMPropList * old_state)
{ {
WMPropList *parr, *pstr, *wks_state, *old_wks_state, *foo, *bar; WMPropList *parr, *pstr, *wks_state, *old_wks_state, *foo, *bar;
int i; int i;
@@ -823,12 +822,12 @@ void wWorkspaceSaveState(WMPropList * old_state)
old_wks_state = WMGetFromPLDictionary(old_state, dWorkspaces); old_wks_state = WMGetFromPLDictionary(old_state, dWorkspaces);
parr = WMCreatePLArray(NULL); parr = WMCreatePLArray(NULL);
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
pstr = WMCreatePLString(w_global.workspace.array[i]->name); pstr = WMCreatePLString(scr->workspaces[i]->name);
wks_state = WMCreatePLDictionary(dName, pstr, NULL); wks_state = WMCreatePLDictionary(dName, pstr, NULL);
WMReleasePropList(pstr); WMReleasePropList(pstr);
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
pstr = wClipSaveWorkspaceState(i); pstr = wClipSaveWorkspaceState(scr, i);
WMPutInPLDictionary(wks_state, dClip, pstr); WMPutInPLDictionary(wks_state, dClip, pstr);
WMReleasePropList(pstr); WMReleasePropList(pstr);
} else if (old_wks_state != NULL) { } else if (old_wks_state != NULL) {
@@ -841,7 +840,7 @@ void wWorkspaceSaveState(WMPropList * old_state)
WMAddToPLArray(parr, wks_state); WMAddToPLArray(parr, wks_state);
WMReleasePropList(wks_state); WMReleasePropList(wks_state);
} }
WMPutInPLDictionary(w_global.session_state, dWorkspaces, parr); WMPutInPLDictionary(scr->session_state, dWorkspaces, parr);
WMReleasePropList(parr); WMReleasePropList(parr);
} }
@@ -852,10 +851,10 @@ void wWorkspaceRestoreState(WScreen *scr)
make_keys(); make_keys();
if (w_global.session_state == NULL) if (scr->session_state == NULL)
return; return;
parr = WMGetFromPLDictionary(w_global.session_state, dWorkspaces); parr = WMGetFromPLDictionary(scr->session_state, dWorkspaces);
if (!parr) if (!parr)
return; return;
@@ -867,35 +866,35 @@ void wWorkspaceRestoreState(WScreen *scr)
else else
pstr = wks_state; pstr = wks_state;
if (i >= w_global.workspace.count) if (i >= scr->workspace_count)
wWorkspaceNew(scr); wWorkspaceNew(scr);
if (w_global.workspace.menu) { if (scr->workspace_menu) {
wfree(w_global.workspace.menu->entries[i + MC_WORKSPACE1]->text); wfree(scr->workspace_menu->entries[i + MC_WORKSPACE1]->text);
w_global.workspace.menu->entries[i + MC_WORKSPACE1]->text = wstrdup(WMGetFromPLString(pstr)); scr->workspace_menu->entries[i + MC_WORKSPACE1]->text = wstrdup(WMGetFromPLString(pstr));
w_global.workspace.menu->flags.realized = 0; scr->workspace_menu->flags.realized = 0;
} }
wfree(w_global.workspace.array[i]->name); wfree(scr->workspaces[i]->name);
w_global.workspace.array[i]->name = wstrdup(WMGetFromPLString(pstr)); scr->workspaces[i]->name = wstrdup(WMGetFromPLString(pstr));
if (!wPreferences.flags.noclip) { if (!wPreferences.flags.noclip) {
int added_omnipresent_icons = 0; int added_omnipresent_icons = 0;
clip_state = WMGetFromPLDictionary(wks_state, dClip); clip_state = WMGetFromPLDictionary(wks_state, dClip);
if (w_global.workspace.array[i]->clip) if (scr->workspaces[i]->clip)
wDockDestroy(w_global.workspace.array[i]->clip); wDockDestroy(scr->workspaces[i]->clip);
w_global.workspace.array[i]->clip = wDockRestoreState(scr, clip_state, WM_CLIP); scr->workspaces[i]->clip = wDockRestoreState(scr, clip_state, WM_CLIP);
if (i > 0) if (i > 0)
wDockHideIcons(w_global.workspace.array[i]->clip); wDockHideIcons(scr->workspaces[i]->clip);
/* We set the global icons here, because scr->workspaces[i]->clip /* We set the global icons here, because scr->workspaces[i]->clip
* was not valid in wDockRestoreState(). * was not valid in wDockRestoreState().
* There we only set icon->omnipresent to know which icons we * There we only set icon->omnipresent to know which icons we
* need to set here. * need to set here.
*/ */
for (j = 0; j < w_global.workspace.array[i]->clip->max_icons; j++) { for (j = 0; j < scr->workspaces[i]->clip->max_icons; j++) {
WAppIcon *aicon = w_global.workspace.array[i]->clip->icon_array[j]; WAppIcon *aicon = scr->workspaces[i]->clip->icon_array[j];
int k; int k;
if (!aicon || !aicon->omnipresent) if (!aicon || !aicon->omnipresent)
@@ -907,21 +906,21 @@ void wWorkspaceRestoreState(WScreen *scr)
continue; continue;
/* Move this appicon from workspace i to workspace 0 */ /* Move this appicon from workspace i to workspace 0 */
w_global.workspace.array[i]->clip->icon_array[j] = NULL; scr->workspaces[i]->clip->icon_array[j] = NULL;
w_global.workspace.array[i]->clip->icon_count--; scr->workspaces[i]->clip->icon_count--;
added_omnipresent_icons++; added_omnipresent_icons++;
/* If there are too many omnipresent appicons, we are in trouble */ /* If there are too many omnipresent appicons, we are in trouble */
assert(w_global.workspace.array[0]->clip->icon_count + added_omnipresent_icons assert(scr->workspaces[0]->clip->icon_count + added_omnipresent_icons
<= w_global.workspace.array[0]->clip->max_icons); <= scr->workspaces[0]->clip->max_icons);
/* Find first free spot on workspace 0 */ /* Find first free spot on workspace 0 */
for (k = 0; k < w_global.workspace.array[0]->clip->max_icons; k++) for (k = 0; k < scr->workspaces[0]->clip->max_icons; k++)
if (w_global.workspace.array[0]->clip->icon_array[k] == NULL) if (scr->workspaces[0]->clip->icon_array[k] == NULL)
break; break;
w_global.workspace.array[0]->clip->icon_array[k] = aicon; scr->workspaces[0]->clip->icon_array[k] = aicon;
aicon->dock = w_global.workspace.array[0]->clip; aicon->dock = scr->workspaces[0]->clip;
} }
w_global.workspace.array[0]->clip->icon_count += added_omnipresent_icons; scr->workspaces[0]->clip->icon_count += added_omnipresent_icons;
} }
WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) i); WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) i);
@@ -929,14 +928,14 @@ void wWorkspaceRestoreState(WScreen *scr)
} }
/* Returns the workspace number for a given workspace name */ /* Returns the workspace number for a given workspace name */
int wGetWorkspaceNumber(const char *value) int wGetWorkspaceNumber(WScreen *scr, const char *value)
{ {
int w, i; int w, i;
if (sscanf(value, "%i", &w) != 1) { if (sscanf(value, "%i", &w) != 1) {
w = -1; w = -1;
for (i = 0; i < w_global.workspace.count; i++) { for (i = 0; i < scr->workspace_count; i++) {
if (strcmp(w_global.workspace.array[i]->name, value) == 0) { if (strcmp(scr->workspaces[i]->name, value) == 0) {
w = i; w = i;
break; break;
} }
+3 -3
View File
@@ -31,14 +31,14 @@ typedef struct WWorkspace {
void wWorkspaceMake(WScreen *scr, int count); void wWorkspaceMake(WScreen *scr, int count);
int wWorkspaceNew(WScreen *scr); int wWorkspaceNew(WScreen *scr);
int wGetWorkspaceNumber(const char *value); int wGetWorkspaceNumber(WScreen *scr, const char *value);
Bool wWorkspaceDelete(WScreen *scr, int workspace); Bool wWorkspaceDelete(WScreen *scr, int workspace);
void wWorkspaceChange(WScreen *scr, int workspace); void wWorkspaceChange(WScreen *scr, int workspace);
void wWorkspaceForceChange(WScreen *scr, int workspace); void wWorkspaceForceChange(WScreen *scr, int workspace);
WMenu *wWorkspaceMenuMake(WScreen *scr, Bool titled); WMenu *wWorkspaceMenuMake(WScreen *scr, Bool titled);
void wWorkspaceMenuUpdate(WMenu *menu); void wWorkspaceMenuUpdate(WScreen *scr, WMenu *menu);
void wWorkspaceMenuEdit(WScreen *scr); void wWorkspaceMenuEdit(WScreen *scr);
void wWorkspaceSaveState(WMPropList *old_state); void wWorkspaceSaveState(WScreen *scr, WMPropList *old_state);
void wWorkspaceRestoreState(WScreen *scr); void wWorkspaceRestoreState(WScreen *scr);
void wWorkspaceRename(WScreen *scr, int workspace, const char *name); void wWorkspaceRename(WScreen *scr, int workspace, const char *name);
void wWorkspaceRelativeChange(WScreen *scr, int amount); void wWorkspaceRelativeChange(WScreen *scr, int amount);
+1 -1
View File
@@ -213,7 +213,7 @@ static Bool acceptXDND(Window window)
} }
} }
if (icon_pos < 0) { if (icon_pos < 0) {
dock = w_global.workspace.array[w_global.workspace.current]->clip; dock = scr->workspaces[scr->current_workspace]->clip;
if (dock) { if (dock) {
for (i = 0; i < dock->max_icons; i++) { for (i = 0; i < dock->max_icons; i++) {
if (dock->icon_array[i] if (dock->icon_array[i]