From b147e8f85c16d42c3fbf270f49bdcbbbb617fb1c Mon Sep 17 00:00:00 2001 From: kojima Date: Sat, 17 Apr 1999 18:24:23 +0000 Subject: [PATCH] show workspace name when changing workspace --- ChangeLog | 1 + README.GNOME | 7 +- WINGs/wslider.c | 3 +- WPrefs.app/Appearance.c | 3 +- WPrefs.app/MouseSettings.c | 78 ++++---------------- src/appicon.c | 6 +- src/main.c | 7 +- src/screen.c | 26 ++++++- src/screen.h | 13 +++- src/superfluous.c | 1 + src/usermenu.c | 52 +++++++------ src/wconfig.h.in | 6 +- src/workspace.c | 178 ++++++++++++++++++++++++++++++++++++++++++++- 13 files changed, 276 insertions(+), 105 deletions(-) diff --git a/ChangeLog b/ChangeLog index 75163bed..360b3e2f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,7 @@ Changes since version 0.52.0: - added a crashing dialog panel to select what to do on crashes. - fixed the problem with showing a window as focused in the window list menu while it was on another workspace. +- show workspace name on screen when switching workspaces Changes since version 0.51.2: diff --git a/README.GNOME b/README.GNOME index e876669f..0cf34fa2 100644 --- a/README.GNOME +++ b/README.GNOME @@ -45,6 +45,9 @@ before compiling. Also, do not disable mwm hints support (they are enabled by default). -I am not sure, but using --enable-lite or DisableWSMouseActions=YES; -might be a bad idea in case of GNOME. + +Configuration +------------- + +In WPrefs, go to the last section and toggle the "Disable miniwindows" option. diff --git a/WINGs/wslider.c b/WINGs/wslider.c index 63af73b4..7910dab2 100644 --- a/WINGs/wslider.c +++ b/WINGs/wslider.c @@ -469,6 +469,7 @@ static void handleActionEvents(XEvent *event, void *data) { WMSlider *sPtr = (Slider*)data; + int ovalue = sPtr->value; CHECK_CLASS(data, WC_Slider); @@ -511,7 +512,7 @@ handleActionEvents(XEvent *event, void *data) break; case ButtonRelease: - if (!sPtr->flags.continuous && sPtr->flags.dragging && sPtr->action) { + if (!sPtr->flags.continuous && ovalue != sPtr->value && sPtr->action) { (*sPtr->action)(sPtr, sPtr->clientData); } sPtr->flags.dragging = 0; diff --git a/WPrefs.app/Appearance.c b/WPrefs.app/Appearance.c index 918508fc..de9e6215 100644 --- a/WPrefs.app/Appearance.c +++ b/WPrefs.app/Appearance.c @@ -956,8 +956,7 @@ changePage(WMWidget *w, void *data) WMSelectListItem(panel->texLs, panel->textureIndex[section]); - WMSetListPosition(panel->texLs, panel->textureIndex[section] - - WMGetListNumberOfRows(panel->texLs)/2); + WMSetListPosition(panel->texLs, panel->textureIndex[section] - 2); item = WMGetListItem(panel->texLs, panel->textureIndex[section]); diff --git a/WPrefs.app/MouseSettings.c b/WPrefs.app/MouseSettings.c index 07959ac4..cb288b53 100644 --- a/WPrefs.app/MouseSettings.c +++ b/WPrefs.app/MouseSettings.c @@ -1,3 +1,4 @@ + /* MouseSettings.c- mouse options (some are equivalent to xset) * * WPrefs - Window Maker Preferences Program @@ -47,7 +48,7 @@ typedef struct _Panel { WMFrame *speedF; WMLabel *speedL; - WMButton *speedB[5]; + WMSlider *speedS; WMLabel *acceL; WMTextField *acceT; WMLabel *threL; @@ -77,7 +78,6 @@ typedef struct _Panel { WMPopUpButton *grabP; /**/ - WMButton *lastClickedSpeed; int maxThreshold; float acceleration; } _Panel; @@ -86,8 +86,6 @@ typedef struct _Panel { #define ICON_FILE "mousesettings" #define SPEED_ICON_FILE "mousespeed" -#define SPEED_IMAGE "speed%i" -#define SPEED_IMAGE_S "speed%is" #define DELAY_ICON "timer%i" #define DELAY_ICON_S "timer%is" @@ -132,7 +130,7 @@ setMouseAccel(WMScreen *scr, float accel, int threshold) static void -speedClick(WMWidget *w, void *data) +speedChange(WMWidget *w, void *data) { _Panel *panel = (_Panel*)data; int i; @@ -155,14 +153,11 @@ speedClick(WMWidget *w, void *data) panel->acceleration = accel; free(tmp); } else { - for (i=0; i<5; i++) { - if (panel->speedB[i]==w) - break; - } + i = (int)WMGetSliderValue(panel->speedS); - panel->acceleration = 0.5+(i*0.5); + panel->acceleration = 0.25+(i*0.25); - sprintf(buffer, "%.2f", 0.5+(i*0.5)); + sprintf(buffer, "%.2f", 0.25+(i*0.25)); WMSetTextFieldText(panel->acceT, buffer); } @@ -185,7 +180,7 @@ returnPressed(void *observerData, WMNotification *notification) { _Panel *panel = (_Panel*)observerData; - speedClick(NULL, panel); + speedChange(NULL, panel); } @@ -310,20 +305,12 @@ showData(_Panel *panel) sprintf(buffer, "%i", a); WMSetTextFieldText(panel->threT, buffer); - a = -1; - for (i=0; i<5; i++) { - if (0.5+(float)i*0.5 == accel) - a = i; - } - if (a >= 0) { - WMPerformButtonClick(panel->speedB[a]); - panel->lastClickedSpeed = panel->speedB[a]; - } + WMSetSliderValue(panel->speedS, (accel - 0.25)/0.25); + panel->acceleration = accel; sprintf(buffer, "%.2f", accel); WMSetTextFieldText(panel->acceT, buffer); - speedClick(panel->lastClickedSpeed, panel); /**/ b = GetIntegerForKey("DoubleClickTime"); /* find best match */ @@ -549,47 +536,14 @@ createPanel(Panel *p) free(path); } - buf1 = wmalloc(strlen(SPEED_IMAGE)+2); - buf2 = wmalloc(strlen(SPEED_IMAGE_S)+2); + panel->speedS = WMCreateSlider(panel->speedF); + WMResizeWidget(panel->speedS, 160, 15); + WMMoveWidget(panel->speedS, 70, 35); + WMSetSliderMinValue(panel->speedS, 0); + WMSetSliderMaxValue(panel->speedS, 40); + WMSetSliderContinuous(panel->speedS, False); + WMSetSliderAction(panel->speedS, speedChange, panel); - for (i = 0; i < 5; i++) { - panel->speedB[i] = WMCreateCustomButton(panel->speedF, - WBBStateChangeMask); - WMResizeWidget(panel->speedB[i], 26, 26); - WMMoveWidget(panel->speedB[i], 60+(35*i), 25); - WMSetButtonBordered(panel->speedB[i], False); - WMSetButtonImagePosition(panel->speedB[i], WIPImageOnly); - WMSetButtonAction(panel->speedB[i], speedClick, panel); - if (i > 0) { - WMGroupButtons(panel->speedB[0], panel->speedB[i]); - } - sprintf(buf1, SPEED_IMAGE, i); - sprintf(buf2, SPEED_IMAGE_S, i); - path = LocateImage(buf1); - if (path) { - icon = WMCreatePixmapFromFile(scr, path); - if (icon) { - WMSetButtonImage(panel->speedB[i], icon); - WMReleasePixmap(icon); - } else { - wwarning(_("could not load icon file %s"), path); - } - free(path); - } - path = LocateImage(buf2); - if (path) { - icon = WMCreatePixmapFromFile(scr, path); - if (icon) { - WMSetButtonAltImage(panel->speedB[i], icon); - WMReleasePixmap(icon); - } else { - wwarning(_("could not load icon file %s"), path); - } - } - } - free(buf1); - free(buf2); - panel->acceL = WMCreateLabel(panel->speedF); WMResizeWidget(panel->acceL, 70, 16); WMMoveWidget(panel->acceL, 10, 67); diff --git a/src/appicon.c b/src/appicon.c index 076f3e66..942c4196 100644 --- a/src/appicon.c +++ b/src/appicon.c @@ -676,10 +676,8 @@ iconDblClick(WObjDescriptor *desc, XEvent *event) return; } #endif /* REDUCE_APPICONS */ -#if 0 - /* aproveita que ta aqui pra atualizar */ - wapp->main_window = aicon->icon->owner->main_window; -#endif + + printf("%i\n",wapp->refcount); unhideHere = (event->xbutton.state & ShiftMask); diff --git a/src/main.c b/src/main.c index 6894b831..c59cd860 100644 --- a/src/main.c +++ b/src/main.c @@ -184,10 +184,13 @@ Restart(char *manager) } } } + if (dpy) { #ifdef XSMP_ENABLED - wSessionDisconnectManager(); + wSessionDisconnectManager(); #endif - XCloseDisplay(dpy); + XCloseDisplay(dpy); + dpy = NULL; + } if (!prog) execvp(Arguments[0], Arguments); else { diff --git a/src/screen.c b/src/screen.c index fd67e3db..1c010650 100644 --- a/src/screen.c +++ b/src/screen.c @@ -155,7 +155,6 @@ alreadyRunningError(Display *dpy, XErrorEvent *error) * not be freed by anybody. *---------------------------------------------------------------------- */ -#ifndef NEWSTUFF static void allocButtonPixmaps(WScreen *scr) { @@ -182,8 +181,6 @@ allocButtonPixmaps(WScreen *scr) pix->shared = 1; scr->b_pixmaps[WBUT_KILL] = pix; } -#endif - static void @@ -366,7 +363,13 @@ allocGCs(WScreen *scr) /* misc drawing GC */ gcv.graphics_exposures = False; gcm = GCGraphicsExposures; - scr->draw_gc = XCreateGC(dpy, scr->w_win, gcm, &gcv); + scr->draw_gc = XCreateGC(dpy, scr->w_win, gcm, &gcv); + + assert (scr->stipple_bitmap!=None); + + + /* mono GC */ + scr->mono_gc = XCreateGC(dpy, scr->stipple_bitmap, gcm, &gcv); } @@ -538,6 +541,19 @@ createInternalWindows(WScreen *scr) CopyFromParent, scr->w_visual, vmask, &attribs); + /* workspace name */ + vmask = CWBackPixel|CWSaveUnder|CWOverrideRedirect|CWColormap + |CWBorderPixel; + attribs.save_under = True; + attribs.override_redirect = True; + attribs.colormap = scr->w_colormap; + attribs.background_pixel = scr->icon_back_texture->normal.pixel; + attribs.border_pixel = 0; /* do not care */ + scr->workspace_name = + XCreateWindow(dpy, scr->root_win, 0, 0, 10, 10, 0, scr->w_depth, + CopyFromParent, scr->w_visual, vmask, &attribs); + + /* for our window manager info notice board */ scr->info_window = XCreateWindow(dpy, scr->root_win, 0, 0, 10, 10, 0, CopyFromParent, @@ -758,6 +774,8 @@ wScreenInit(int screen_number) scr->frame_border_pixel = xcol.pixel; } + scr->workspace_name_font = wLoadFont(DEF_WORKSPACE_NAME_FONT); + /* create GCs with default values */ allocGCs(scr); diff --git a/src/screen.h b/src/screen.h index f115dafd..03f8b787 100644 --- a/src/screen.h +++ b/src/screen.h @@ -152,6 +152,7 @@ typedef struct _WScreen { WFont *clip_title_font; /* for clip titles */ WFont *info_text_font; /* text on things like geometry * hint boxes */ + WFont *workspace_name_font; WMPixel select_pixel; WMPixel select_text_pixel; @@ -192,13 +193,16 @@ typedef struct _WScreen { GC select_menu_gc; /* selected menu entries */ GC disabled_menu_entry_gc; /* disabled menu entries */ GC info_text_gc; /* for size/position display */ + GC icon_select_gc; + GC workspace_name_gc; /* for the name shown when workspace + * is changed */ GC frame_gc; /* gc for resize/move frame (root) */ GC line_gc; /* gc for drawing XORed lines (root) */ GC copy_gc; /* gc for XCopyArea() */ GC stipple_gc; /* gc for stippled filling */ - GC icon_select_gc; GC draw_gc; /* gc for drawing misc things */ + GC mono_gc; /* gc for 1 bit drawables */ #ifndef NEWSTUFF struct WPixmap *b_pixmaps[PRED_BPIXMAPS]; /* internal pixmaps for buttons*/ @@ -270,7 +274,12 @@ typedef struct _WScreen { /* balloon help data */ struct _WBalloon *balloon; - + + /* workspace name data */ + Window workspace_name; + WMHandlerID *workspace_name_timer; + struct WorkspaceNameData *workspace_name_data; + /* for raise-delay */ WMHandlerID *autoRaiseTimer; Window autoRaiseWindow; /* window that is scheduled to be diff --git a/src/superfluous.c b/src/superfluous.c index 6ec38e1b..ec1f1db7 100644 --- a/src/superfluous.c +++ b/src/superfluous.c @@ -565,3 +565,4 @@ InitGhostWindowMove(WScreen *scr) } #endif /* GHOST_WINDOW_MOVE */ + diff --git a/src/usermenu.c b/src/usermenu.c index 69a0e698..62923e6a 100644 --- a/src/usermenu.c +++ b/src/usermenu.c @@ -69,7 +69,8 @@ typedef struct { static void -notifyClient(WMenu *menu, WMenuEntry *entry){ +notifyClient(WMenu *menu, WMenuEntry *entry) +{ XEvent event; WUserMenuData *data = entry->clientdata; WScreen *scr = data->screen; @@ -78,7 +79,7 @@ notifyClient(WMenu *menu, WMenuEntry *entry){ window=scr->focused_window->client_win; - for(i=0;ikey_no;i++){ + for(i=0;ikey_no;i++) { event.xkey.type = KeyPress; event.xkey.display = dpy; event.xkey.window = window; @@ -99,7 +100,8 @@ notifyClient(WMenu *menu, WMenuEntry *entry){ } static void -removeUserMenudata(void *menudata){ +removeUserMenudata(void *menudata) +{ WUserMenuData *data = menudata; if(data->key) free(data->key); free(data); @@ -107,7 +109,8 @@ removeUserMenudata(void *menudata){ static WUserMenuData* -convertShortcuts(WScreen *scr, proplist_t shortcut){ +convertShortcuts(WScreen *scr, proplist_t shortcut) +{ WUserMenuData *data; KeySym ksym; char *k; @@ -115,10 +118,10 @@ convertShortcuts(WScreen *scr, proplist_t shortcut){ char buf[128], *b; int keycount,i,j,mod; - if (PLIsString(shortcut)){ + if (PLIsString(shortcut)) { keycount = 1; } - else if (PLIsArray(shortcut)){ + else if (PLIsArray(shortcut)) { keycount = PLGetNumberOfElements(shortcut); } else return NULL; @@ -137,8 +140,7 @@ convertShortcuts(WScreen *scr, proplist_t shortcut){ data->key[j].modifier = 0; if (PLIsArray(shortcut)) { strcpy(buf, PLGetString(PLGetArrayElement(shortcut, i))); - } - else { + } else { strcpy(buf, PLGetString(shortcut)); } b = (char*)buf; @@ -180,7 +182,8 @@ keyover: } static WMenu* -configureUserMenu(WScreen *scr, proplist_t plum){ +configureUserMenu(WScreen *scr, proplist_t plum) +{ char *mtitle; WMenu *menu=NULL; proplist_t elem, title, command, params; @@ -188,7 +191,7 @@ configureUserMenu(WScreen *scr, proplist_t plum){ WUserMenuData *data; if (!plum) return NULL; - if (!PLIsArray(plum)){ + if (!PLIsArray(plum)) { return NULL; } @@ -196,7 +199,7 @@ configureUserMenu(WScreen *scr, proplist_t plum){ if (!count) return NULL; elem = PLGetArrayElement(plum, 0); - if (!PLIsString(elem)){ + if (!PLIsString(elem)) { return NULL; } @@ -204,9 +207,9 @@ configureUserMenu(WScreen *scr, proplist_t plum){ menu=wMenuCreateForApp(scr, mtitle, True); - for(i=1; ifree_cdata = removeUserMenudata; - if (PLGetNumberOfElements(elem) >= 4){ + if (PLGetNumberOfElements(elem) >= 4) { instances = PLGetArrayElement(elem,idx++); if(PLIsArray(instances)) - if (instances && PLGetNumberOfElements(instances) - && PLIsArray(instances)){ - entry->instances = PLRetain(instances); + if (instances && PLGetNumberOfElements(instances) + && PLIsArray(instances)){ + entry->instances = PLRetain(instances); } } } @@ -278,9 +281,9 @@ wUserMenuRefreshInstances(WMenu *menu, WWindow *wwin) oldflag = menu->entries[i]->flags.enabled; menu->entries[i]->flags.enabled = 0; - for (j=0; jentries[i]->instances,j); - if (!strcmp(wwin->wm_instance,PLGetString(ins))){ + if (!strcmp(wwin->wm_instance,PLGetString(ins))) { menu->entries[i]->flags.enabled = 1; break; } @@ -291,12 +294,12 @@ wUserMenuRefreshInstances(WMenu *menu, WWindow *wwin) } for (i=0; i < menu->cascade_no; i++) { if (!menu->cascades[i]->flags.brother) - wUserMenuRefreshInstances(menu->cascades[i], wwin); + wUserMenuRefreshInstances(menu->cascades[i], wwin); else - wUserMenuRefreshInstances(menu->cascades[i]->brother, wwin); + wUserMenuRefreshInstances(menu->cascades[i]->brother, wwin); } - if(paintflag) + if (paintflag) wMenuPaint(menu); } @@ -322,7 +325,8 @@ readUserMenuFile(WScreen *scr, char *file_name) WMenu* -wUserMenuGet(WScreen *scr, WWindow *wwin){ +wUserMenuGet(WScreen *scr, WWindow *wwin) +{ WMenu *menu = NULL; char buffer[100]; char *path = NULL; diff --git a/src/wconfig.h.in b/src/wconfig.h.in index 4aa95291..2599e335 100644 --- a/src/wconfig.h.in +++ b/src/wconfig.h.in @@ -299,13 +299,17 @@ #define DEF_ICON_TITLE_FONT "\"-*-*-medium-r-normal--10-*\"" #define DEF_CLIP_TITLE_FONT "\"-*-*-medium-r-normal--10-*\"" #define DEF_INFO_TEXT_FONT "\"-*-*-medium-r-normal--14-*\"" -#else /* I18N_MB */ + +#define DEF_WORKSPACE_NAME_FONT "-*-*-medium-r-normal--24-*" +#else /* !I18N_MB */ #define DEF_TITLE_FONT "\"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*\"" #define DEF_MENU_TITLE_FONT "\"-*-helvetica-bold-r-normal-*-12-*-*-*-*-*-*-*\"" #define DEF_MENU_ENTRY_FONT "\"-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*\"" #define DEF_ICON_TITLE_FONT "\"-*-helvetica-medium-r-normal-*-8-*-*-*-*-*-*-*\"" #define DEF_CLIP_TITLE_FONT "\"-*-helvetica-bold-r-normal-*-10-*-*-*-*-*-*-*\"" #define DEF_INFO_TEXT_FONT "\"-*-helvetica-medium-r-normal-*-12-*-*-*-*-*-*-*\"" + +#define DEF_WORKSPACE_NAME_FONT "-*-times-bold-i-normal--24-*" #endif /* !I18N_MB */ #define HELVETICA10_FONT "-*-helvetica-medium-r-normal-*-10-*-*-*-*-*-*-*" diff --git a/src/workspace.c b/src/workspace.c index 78eb7628..22b673fc 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -23,6 +23,10 @@ #include #include +#ifdef SHAPE +#include +#endif + #include #include #include @@ -220,15 +224,185 @@ wWorkspaceDelete(WScreen *scr, int workspace) } +typedef struct WorkspaceNameData { + int count; + RImage *back; + RImage *text; +} WorkspaceNameData; + + + +static void +hideWorkpaceName(void *data) +{ + WScreen *scr = (WScreen*)data; + + + if (!scr->workspace_name_data || scr->workspace_name_data->count == 0) { + XUnmapWindow(dpy, scr->workspace_name); + + if (scr->workspace_name_data) { + RDestroyImage(scr->workspace_name_data->back); + RDestroyImage(scr->workspace_name_data->text); + free(scr->workspace_name_data); + + scr->workspace_name_data = NULL; + } + scr->workspace_name_timer = NULL; + } else { + RImage *img = RCloneImage(scr->workspace_name_data->back); + Pixmap pix; + + RCombineImagesWithOpaqueness(img, scr->workspace_name_data->text, + scr->workspace_name_data->count*255/10); + + RConvertImage(scr->rcontext, img, &pix); + + RDestroyImage(img); + + XSetWindowBackgroundPixmap(dpy, scr->workspace_name, pix); + XClearWindow(dpy, scr->workspace_name); + XFreePixmap(dpy, pix); + XFlush(dpy); + + scr->workspace_name_data->count--; + + scr->workspace_name_timer = WMAddTimerHandler(40, hideWorkpaceName, + scr); + } +} + + + +static void +showWorkspaceName(WScreen *scr, int workspace) +{ + WorkspaceNameData *data; + RXImage *ximg; + Pixmap text, mask; + int w, h; + char *name = scr->workspaces[workspace]->name; + int len = strlen(name); + int x, y; + + if (scr->workspace_name_timer) { + WMDeleteTimerHandler(scr->workspace_name_timer); + XUnmapWindow(dpy, scr->workspace_name); + XFlush(dpy); + } + + if (scr->workspace_name_data) { + RDestroyImage(scr->workspace_name_data->back); + RDestroyImage(scr->workspace_name_data->text); + free(scr->workspace_name_data); + } + +#ifndef I18N_MB + XSetFont(dpy, scr->mono_gc, scr->workspace_name_font->font->fid); + XSetFont(dpy, scr->draw_gc, scr->workspace_name_font->font->fid); +#endif + + data = wmalloc(sizeof(WorkspaceNameData)); + + w = wTextWidth(scr->workspace_name_font->font, name, len); + h = scr->workspace_name_font->height; + + XResizeWindow(dpy, scr->workspace_name, w+4, h+4); + XMoveWindow(dpy, scr->workspace_name, (scr->scr_width - (w+4))/2, + (scr->scr_height - (h+4))/2); + + text = XCreatePixmap(dpy, scr->w_win, w+4, h+4, scr->w_depth); + mask = XCreatePixmap(dpy, scr->w_win, w+4, h+4, 1); + + XSetForeground(dpy, scr->draw_gc, scr->black_pixel); + XFillRectangle(dpy, text, scr->draw_gc, 0, 0, w+4, h+4); + + XSetForeground(dpy, scr->mono_gc, 0); + XFillRectangle(dpy, mask, scr->mono_gc, 0, 0, w+4, h+4); + + XSetForeground(dpy, scr->mono_gc, 1); + for (x = 0; x <= 4; x++) { + for (y = 0; y <= 4; y++) { + wDrawString(mask, scr->workspace_name_font, scr->mono_gc, + x, scr->workspace_name_font->y + y, name, len); + } + } + + XSetForeground(dpy, scr->draw_gc, scr->white_pixel); + wDrawString(text, scr->workspace_name_font, scr->draw_gc, + 2, scr->workspace_name_font->y + 2, + scr->workspaces[workspace]->name, + strlen(scr->workspaces[workspace]->name)); +#ifdef SHAPE + XShapeCombineMask(dpy, scr->workspace_name, ShapeBounding, 0, 0, mask, + ShapeSet); +#endif + XSetWindowBackgroundPixmap(dpy, scr->workspace_name, text); + XClearWindow(dpy, scr->workspace_name); + + data->text = RCreateImageFromDrawable(scr->rcontext, text, None); + + XFreePixmap(dpy, text); + XFreePixmap(dpy, mask); + + if (!data->text) { + XMapRaised(dpy, scr->workspace_name); + XFlush(dpy); + + goto erro; + } + + ximg = RGetXImage(scr->rcontext, scr->root_win, + (scr->scr_width - data->text->width)/2, + (scr->scr_height - data->text->height)/2, + data->text->width, data->text->height); + + if (!ximg) { + goto erro; + } + + XMapRaised(dpy, scr->workspace_name); + XFlush(dpy); + + data->back = RCreateImageFromXImage(scr->rcontext, ximg->image, NULL); + RDestroyXImage(scr->rcontext, ximg); + + if (!data->back) { + goto erro; + } + + data->count = 10; + + scr->workspace_name_data = data; + + scr->workspace_name_timer = WMAddTimerHandler(200, hideWorkpaceName, scr); + + return; + +erro: + if (data->text) + RDestroyImage(data->text); + if (data->back) + RDestroyImage(data->back); + free(data); + + scr->workspace_name_data = NULL; + + scr->workspace_name_timer = WMAddTimerHandler(600, hideWorkpaceName, scr); +} + + void wWorkspaceChange(WScreen *scr, int workspace) { if (scr->flags.startup || scr->flags.startup2) { return; } - + if (workspace != scr->current_workspace) { wWorkspaceForceChange(scr, workspace); + } else { + showWorkspaceName(scr, workspace); } } @@ -395,6 +569,8 @@ wWorkspaceForceChange(WScreen *scr, int workspace) } } + showWorkspaceName(scr, workspace); + #ifdef GNOME_STUFF wGNOMEUpdateCurrentWorkspaceHint(scr); #endif -- 2.11.4.GIT