[ Hmmz, why isn't a Reply-To set for these e-mails? I'm sometimes
  only get the half of some discussions... ]

* Marco A. Sousa <[EMAIL PROTECTED]> [010215 20:13]:
 
> > Why don't you just use the autohide option of the toolbar ? 
> But while changing workspaces some times I dont  know where I am. Then I have
> to mouse over the toolbar just to see workspace name. 
> Couldn' this be automatic when change workspace?
> I mean, toolbar pop/show-up then hide itself again?

I'm no programmer, but I can remember that WindowMaker has something
like that (the workspace name 'lights up' for about 2secs in the middle
of your screen).

Hmmz, I that function is in src/workspace.c in the WindowMaker tarball.
I've attached it, but as I said: I'm no programmer so it can easily be
the wrong function ;)

mdb
-- 
De Amerikanen hebben niet eens een gewoon woord voor 'gezelligheid'.
         - Max Westerman
static void
showWorkspaceName(WScreen *scr, int workspace)
{
    WorkspaceNameData *data;
    RXImage *ximg;
    Pixmap text, mask;
    int w, h;
    int px, py;
    char *name = scr->workspaces[workspace]->name;
    int len = strlen(name);
    int x, y;

    if (wPreferences.workspace_name_display_position == WD_NONE
        || scr->workspace_count < 2)
        return;

    if (scr->workspace_name_timer) {
        WMDeleteTimerHandler(scr->workspace_name_timer);
        XUnmapWindow(dpy, scr->workspace_name);
        XFlush(dpy);
    }
    scr->workspace_name_timer = WMAddTimerHandler(WORKSPACE_NAME_DELAY,
                                                  hideWorkpaceName, scr);

    if (scr->workspace_name_data) {
        RDestroyImage(scr->workspace_name_data->back);
        RDestroyImage(scr->workspace_name_data->text);
        free(scr->workspace_name_data);
    }

    data = wmalloc(sizeof(WorkspaceNameData));

    w = WMWidthOfString(scr->workspace_name_font, name, len);
    h = WMFontHeight(scr->workspace_name_font);

    switch (wPreferences.workspace_name_display_position) {
     case WD_TOP:
        px = (scr->scr_width - (w+4))/2;
        py = 0;
        break;
     case WD_BOTTOM:
        px = (scr->scr_width - (w+4))/2;
        py = scr->scr_height - (h+4);
        break;
     case WD_TOPLEFT:
        px = 0;
        py = 0;
        break;
     case WD_TOPRIGHT:
        px = scr->scr_width - (w+4);
        py = 0;
        break;
     case WD_BOTTOMLEFT:
        px = 0;
        py = scr->scr_height - (h+4);
        break;
     case WD_BOTTOMRIGHT:
        px = scr->scr_width - (w+4);
        py = scr->scr_height - (h+4);
        break;
     case WD_CENTER:
     default:
        px = (scr->scr_width - (w+4))/2;
        py = (scr->scr_height - (h+4))/2;
        break;
    }
    XResizeWindow(dpy, scr->workspace_name, w+4, h+4);
    XMoveWindow(dpy, scr->workspace_name, px, py);

    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++) {
            WMDrawString(scr->wmscreen, mask, scr->mono_gc,
                         scr->workspace_name_font, x, y, name, len);
        }
    }

    XSetForeground(dpy, scr->draw_gc, scr->white_pixel);
    WMDrawString(scr->wmscreen, text, scr->draw_gc, scr->workspace_name_font, 
                 2, 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, px, py,
                      data->text->width, data->text->height);

    if (!ximg || !ximg->image) {
        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;

    /* set a timeout for the effect */
    data->timeout = time(NULL) + 2 +
        (WORKSPACE_NAME_DELAY + WORKSPACE_NAME_FADE_DELAY*data->count)/1000;

    scr->workspace_name_data = data;


    return;

erro:
    if (scr->workspace_name_timer)
        WMDeleteTimerHandler(scr->workspace_name_timer);

    if (data->text)
        RDestroyImage(data->text);
    if (data->back)
        RDestroyImage(data->back);
    free(data);

    scr->workspace_name_data = NULL;

    scr->workspace_name_timer = WMAddTimerHandler(WORKSPACE_NAME_DELAY +
                                                  10*WORKSPACE_NAME_FADE_DELAY,
                                                  hideWorkpaceName, scr);
}

Reply via email to