Author: olivier Date: 2006-08-21 20:13:05 +0000 (Mon, 21 Aug 2006) New Revision: 22847
Modified: xfwm4/trunk/src/client.c xfwm4/trunk/src/events.c xfwm4/trunk/src/focus.c xfwm4/trunk/src/frame.c xfwm4/trunk/src/frame.h xfwm4/trunk/src/mypixmap.c xfwm4/trunk/src/netwm.c Log: Fix frame repaint error caused by the removal of pixmap caching (Bug #2202), fix an issue with themes that miss that menu button. Modified: xfwm4/trunk/src/client.c =================================================================== --- xfwm4/trunk/src/client.c 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/client.c 2006-08-21 20:13:05 UTC (rev 22847) @@ -268,7 +268,7 @@ } if (mask & UPDATE_FRAME) { - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } } myScreenUngrabPointer (screen_info, CurrentTime); @@ -392,7 +392,7 @@ if (c != clientGetFocus ()) { FLAG_TOGGLE (c->xfwm_flags, XFWM_FLAG_SEEN_ACTIVE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } return (TRUE); } @@ -408,7 +408,7 @@ if (c->blink_timeout_id) { g_source_remove (c->blink_timeout_id); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } FLAG_UNSET (c->wm_flags, WM_FLAG_URGENT); @@ -428,7 +428,7 @@ && (c != clientGetFocus ())) { FLAG_UNSET (c->xfwm_flags, XFWM_FLAG_SEEN_ACTIVE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } } @@ -828,7 +828,7 @@ if (resized || (flags & CFG_FORCE_REDRAW)) { - frameDraw (c, (flags & CFG_FORCE_REDRAW), TRUE); + frameDraw (c, (flags & CFG_FORCE_REDRAW)); } if ((flags & CFG_NOTIFY) || @@ -1107,7 +1107,7 @@ } else if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_IS_RESIZABLE) != previous_value) { - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } } else @@ -1350,7 +1350,7 @@ { clientUnstick (c, TRUE); } - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } } else if ((action & WIN_STATE_MAXIMIZED) @@ -1431,14 +1431,17 @@ size = MIN (screen_info->buttons[MENU_BUTTON][ACTIVE].width, screen_info->buttons[MENU_BUTTON][ACTIVE].height); - - icon = getAppIcon (display_info, c->window, size, size); - xfwmPixmapRenderGdkPixbuf (&c->appmenu[ACTIVE], icon); - xfwmPixmapRenderGdkPixbuf (&c->appmenu[INACTIVE], icon); - xfwmPixmapRenderGdkPixbuf (&c->appmenu[PRESSED], icon); + if (size > 1) + { + icon = getAppIcon (display_info, c->window, size, size); - g_object_unref (icon); + xfwmPixmapRenderGdkPixbuf (&c->appmenu[ACTIVE], icon); + xfwmPixmapRenderGdkPixbuf (&c->appmenu[INACTIVE], icon); + xfwmPixmapRenderGdkPixbuf (&c->appmenu[PRESSED], icon); + + g_object_unref (icon); + } } Client * @@ -2732,7 +2735,7 @@ c->win_state &= ~WIN_STATE_MAXIMIZED; FLAG_UNSET (c->flags, CLIENT_FLAG_MAXIMIZED); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); clientSetNetState (c); } @@ -4557,12 +4560,12 @@ if (xevent->type == EnterNotify) { c->button_pressed[b] = TRUE; - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } else if (xevent->type == LeaveNotify) { c->button_pressed[b] = FALSE; - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } else if (xevent->type == ButtonRelease) { @@ -4633,7 +4636,7 @@ passdata.b = b; c->button_pressed[b] = TRUE; - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); TRACE ("entering button press loop"); eventFilterPush (display_info->xfilter, clientButtonPress_event_filter, &passdata); @@ -4683,7 +4686,7 @@ default: break; } - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } } Modified: xfwm4/trunk/src/events.c =================================================================== --- xfwm4/trunk/src/events.c 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/events.c 2006-08-21 20:13:05 UTC (rev 22847) @@ -410,7 +410,7 @@ if (CLIENT_CAN_STICK_WINDOW(c)) { clientToggleSticky (c, TRUE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } break; case KEY_RAISE_WINDOW: @@ -1730,7 +1730,7 @@ } getWindowName (display_info, c->window, &c->name); FLAG_SET (c->flags, CLIENT_FLAG_NAME_CHANGED); - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } else if (ev->atom == display_info->atoms[MOTIF_WM_HINTS]) { @@ -1750,7 +1750,7 @@ if ((c->wmhints->flags & IconPixmapHint) && (screen_info->params->show_app_icon)) { clientUpdateIcon (c); - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } if (HINTS_ACCEPT_INPUT (c->wmhints)) { @@ -1789,7 +1789,7 @@ { TRACE ("client \"%s\" (0x%lx) has received a net_wm_window_type notify", c->name, c->window); clientGetNetWmType (c); - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } else if ((ev->atom == display_info->atoms[NET_WM_STRUT]) || (ev->atom == display_info->atoms[NET_WM_STRUT_PARTIAL])) @@ -1834,7 +1834,7 @@ (ev->atom == display_info->atoms[KWM_WIN_ICON]))) { clientUpdateIcon (c); - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } #ifdef HAVE_STARTUP_NOTIFICATION else if (ev->atom == display_info->atoms[NET_STARTUP_ID]) @@ -1935,7 +1935,7 @@ if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_STICK) && !FLAG_TEST (c->flags, CLIENT_FLAG_STICKY)) { clientStick (c, TRUE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } } else @@ -1943,7 +1943,7 @@ if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_STICK) && FLAG_TEST (c->flags, CLIENT_FLAG_STICKY)) { clientUnstick (c, TRUE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } if (ev->data.l[0] != c->win_workspace) { @@ -2094,7 +2094,7 @@ } if (!update) { - frameDraw (c, FALSE, TRUE); + frameDraw (c, FALSE); } } } @@ -2294,11 +2294,11 @@ { clientHide (c, c->win_workspace, TRUE); } - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); break; case MENU_OP_MINIMIZE_ALL: clientHideAll (c, c->win_workspace); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); break; case MENU_OP_UNMINIMIZE: clientShow (c, TRUE); @@ -2311,26 +2311,26 @@ case MENU_OP_STICK: case MENU_OP_UNSTICK: clientToggleSticky (c, TRUE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); break; case MENU_OP_WORKSPACES: clientSetWorkspace (c, GPOINTER_TO_INT (item_data), TRUE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); break; case MENU_OP_DELETE: - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); clientClose (c); break; case MENU_OP_CONTEXT_HELP: clientEnterContextMenuState (c); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); break; case MENU_OP_ABOVE: case MENU_OP_NORMAL: clientToggleAbove (c); /* Fall thru */ default: - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); break; } } @@ -2367,7 +2367,7 @@ if ((c) && ((ev->button == 1) || (ev->button == 3))) { c->button_pressed[MENU_BUTTON] = TRUE; - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); y = c->y; ops = MENU_OP_DELETE | MENU_OP_MINIMIZE_ALL | MENU_OP_WORKSPACES; insensitive = 0; @@ -2519,7 +2519,7 @@ TRACE ("Cannot open menu"); gdk_beep (); c->button_pressed[MENU_BUTTON] = FALSE; - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); xfwmWindowDelete (&menu_event_window); menu_free (menu); } Modified: xfwm4/trunk/src/focus.c =================================================================== --- xfwm4/trunk/src/focus.c 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/focus.c 2006-08-21 20:13:05 UTC (rev 22847) @@ -460,7 +460,7 @@ } data[0] = c->window; clientAdjustFullscreenLayer (c, TRUE); - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } else { @@ -473,7 +473,7 @@ clientAdjustFullscreenLayer (c2, FALSE); /* clientRaise (c, None); */ } - frameDraw (c2, FALSE, FALSE); + frameDraw (c2, FALSE); } data[1] = None; XChangeProperty (display_info->dpy, screen_info->xroot, @@ -554,7 +554,7 @@ client_focus = NULL; if (c2) { - frameDraw (c2, FALSE, FALSE); + frameDraw (c2, FALSE); XChangeProperty (clientGetXDisplay (c2), c2->screen_info->xroot, display_info->atoms[NET_ACTIVE_WINDOW], XA_WINDOW, 32, PropModeReplace, (unsigned char *) data, 2); } Modified: xfwm4/trunk/src/frame.c =================================================================== --- xfwm4/trunk/src/frame.c 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/frame.c 2006-08-21 20:13:05 UTC (rev 22847) @@ -788,7 +788,7 @@ } void -frameDraw (Client * c, gboolean clear_all, gboolean force_shape_update) +frameDraw (Client * c, gboolean clear_all) { ScreenInfo *screen_info; FramePixmap frame_pix; @@ -867,18 +867,6 @@ c->previous_height = c->height; } } - /* Corners never resized, we need to update them separately */ - if (requires_clearing) - { - xfwmWindowSetBG (&c->corners[CORNER_TOP_LEFT], - &screen_info->corners[CORNER_TOP_LEFT][state]); - xfwmWindowSetBG (&c->corners[CORNER_TOP_RIGHT], - &screen_info->corners[CORNER_TOP_RIGHT][state]); - xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_LEFT], - &screen_info->corners[CORNER_BOTTOM_LEFT][state]); - xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_RIGHT], - &screen_info->corners[CORNER_BOTTOM_RIGHT][state]); - } if (FLAG_TEST (c->xfwm_flags, XFWM_FLAG_HAS_BORDER) && !FLAG_TEST (c->flags, CLIENT_FLAG_FULLSCREEN)) @@ -982,57 +970,28 @@ xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_RIGHT]); xfwmPixmapInit (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM]); - if (requires_clearing || width_changed) - { - frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title); - xfwmWindowSetBG (&c->title, &frame_pix.pm_title); + /* The title is always visible */ + frameCreateTitlePixmap (c, state, left, right, &frame_pix.pm_title); + xfwmWindowSetBG (&c->title, &frame_pix.pm_title); + xfwmWindowShow (&c->title, + frameTopLeftWidth (c, state), 0, top_width, + frameTop (c), (requires_clearing | width_changed)); - xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM], - bottom_width, frameBottom (c)); - xfwmPixmapFill (&screen_info->sides[SIDE_BOTTOM][state], - &frame_pix.pm_sides[SIDE_BOTTOM], - 0, 0, bottom_width, frameBottom (c)); - xfwmWindowSetBG (&c->sides[SIDE_BOTTOM], - &frame_pix.pm_sides[SIDE_BOTTOM]); - } - - if (requires_clearing || height_changed) + /* Corners are never resized, we need to update them separately */ + if (requires_clearing) { - xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_LEFT], - frameLeft (c), left_height); - xfwmPixmapFill (&screen_info->sides[SIDE_LEFT][state], - &frame_pix.pm_sides[SIDE_LEFT], - 0, 0, frameLeft (c), left_height); - xfwmWindowSetBG (&c->sides[SIDE_LEFT], - &frame_pix.pm_sides[SIDE_LEFT]); - - xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_RIGHT], - frameRight (c), right_height); - xfwmPixmapFill (&screen_info->sides[SIDE_RIGHT][state], - &frame_pix.pm_sides[SIDE_RIGHT], - 0, 0, frameRight (c), right_height); - xfwmWindowSetBG (&c->sides[SIDE_RIGHT], - &frame_pix.pm_sides[SIDE_RIGHT]); + xfwmWindowSetBG (&c->corners[CORNER_TOP_LEFT], + &screen_info->corners[CORNER_TOP_LEFT][state]); + xfwmWindowSetBG (&c->corners[CORNER_TOP_RIGHT], + &screen_info->corners[CORNER_TOP_RIGHT][state]); + xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_LEFT], + &screen_info->corners[CORNER_BOTTOM_LEFT][state]); + xfwmWindowSetBG (&c->corners[CORNER_BOTTOM_RIGHT], + &screen_info->corners[CORNER_BOTTOM_RIGHT][state]); } - if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED)) - { - xfwmWindowHide (&c->sides[SIDE_LEFT]); - xfwmWindowHide (&c->sides[SIDE_RIGHT]); - } - else - { - xfwmWindowShow (&c->sides[SIDE_LEFT], 0, frameTop (c), - frameLeft (c), left_height, (requires_clearing | height_changed)); - xfwmWindowShow (&c->sides[SIDE_RIGHT], - frameWidth (c) - frameRight (c), frameTop (c), frameRight (c), - right_height, (requires_clearing | height_changed)); - } - if (FLAG_TEST_ALL (c->flags, CLIENT_FLAG_MAXIMIZED)) { - xfwmWindowShow (&c->title, 0, 0, top_width, frameTop (c), - (requires_clearing | width_changed)); xfwmWindowHide (&c->sides[SIDE_LEFT]); xfwmWindowHide (&c->sides[SIDE_RIGHT]); xfwmWindowHide (&c->sides[SIDE_BOTTOM]); @@ -1043,28 +1002,65 @@ } else { - xfwmWindowShow (&c->title, - frameTopLeftWidth (c, state), 0, top_width, - frameTop (c), (requires_clearing | width_changed)); + if (FLAG_TEST (c->flags, CLIENT_FLAG_SHADED)) + { + xfwmWindowHide (&c->sides[SIDE_LEFT]); + xfwmWindowHide (&c->sides[SIDE_RIGHT]); + } + else + { + xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_LEFT], + frameLeft (c), left_height); + xfwmPixmapFill (&screen_info->sides[SIDE_LEFT][state], + &frame_pix.pm_sides[SIDE_LEFT], + 0, 0, frameLeft (c), left_height); + xfwmWindowSetBG (&c->sides[SIDE_LEFT], + &frame_pix.pm_sides[SIDE_LEFT]); + xfwmWindowShow (&c->sides[SIDE_LEFT], 0, frameTop (c), + frameLeft (c), left_height, (requires_clearing | height_changed)); + + xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_RIGHT], + frameRight (c), right_height); + xfwmPixmapFill (&screen_info->sides[SIDE_RIGHT][state], + &frame_pix.pm_sides[SIDE_RIGHT], + 0, 0, frameRight (c), right_height); + xfwmWindowSetBG (&c->sides[SIDE_RIGHT], + &frame_pix.pm_sides[SIDE_RIGHT]); + xfwmWindowShow (&c->sides[SIDE_RIGHT], + frameWidth (c) - frameRight (c), frameTop (c), frameRight (c), + right_height, (requires_clearing | height_changed)); + } + + xfwmPixmapCreate (screen_info, &frame_pix.pm_sides[SIDE_BOTTOM], + bottom_width, frameBottom (c)); + xfwmPixmapFill (&screen_info->sides[SIDE_BOTTOM][state], + &frame_pix.pm_sides[SIDE_BOTTOM], + 0, 0, bottom_width, frameBottom (c)); + xfwmWindowSetBG (&c->sides[SIDE_BOTTOM], + &frame_pix.pm_sides[SIDE_BOTTOM]); xfwmWindowShow (&c->sides[SIDE_BOTTOM], screen_info->corners[CORNER_BOTTOM_LEFT][state].width, frameHeight (c) - frameBottom (c), bottom_width, frameBottom (c), (requires_clearing | width_changed)); + xfwmWindowShow (&c->corners[CORNER_TOP_LEFT], 0, 0, frameTopLeftWidth (c, state), screen_info->corners[CORNER_TOP_LEFT][state].height, requires_clearing); + xfwmWindowShow (&c->corners[CORNER_TOP_RIGHT], frameWidth (c) - frameTopRightWidth (c, state), 0, frameTopRightWidth (c, state), screen_info->corners[CORNER_TOP_RIGHT][state].height, requires_clearing); + xfwmWindowShow (&c->corners[CORNER_BOTTOM_LEFT], 0, frameHeight (c) - screen_info->corners[CORNER_BOTTOM_LEFT][state].height, screen_info->corners[CORNER_BOTTOM_LEFT][state].width, screen_info->corners[CORNER_BOTTOM_LEFT][state].height, requires_clearing); + xfwmWindowShow (&c->corners[CORNER_BOTTOM_RIGHT], frameWidth (c) - screen_info->corners[CORNER_BOTTOM_RIGHT][state].width, @@ -1074,10 +1070,7 @@ screen_info->corners[CORNER_BOTTOM_RIGHT][state].height, requires_clearing); } - if (requires_clearing | force_shape_update) - { - frameSetShape (c, state, &frame_pix, button_x); - } + frameSetShape (c, state, &frame_pix, button_x); xfwmPixmapFree (&frame_pix.pm_title); xfwmPixmapFree (&frame_pix.pm_sides[SIDE_BOTTOM]); xfwmPixmapFree (&frame_pix.pm_sides[SIDE_LEFT]); Modified: xfwm4/trunk/src/frame.h =================================================================== --- xfwm4/trunk/src/frame.h 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/frame.h 2006-08-21 20:13:05 UTC (rev 22847) @@ -49,6 +49,6 @@ int frameY (Client *); int frameWidth (Client *); int frameHeight (Client *); -void frameDraw (Client *, gboolean, gboolean); +void frameDraw (Client *, gboolean); #endif /* INC_FRAME_H */ Modified: xfwm4/trunk/src/mypixmap.c =================================================================== --- xfwm4/trunk/src/mypixmap.c 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/mypixmap.c 2006-08-21 20:13:05 UTC (rev 22847) @@ -806,6 +806,10 @@ gint width, height; gint dest_x, dest_y; + g_return_val_if_fail (pm != NULL, FALSE); + g_return_val_if_fail (pm->pixmap != None, FALSE); + g_return_val_if_fail (pm->mask != None, FALSE); + dest_pixmap = gdk_xid_table_lookup (pm->pixmap); if (dest_pixmap) { @@ -880,6 +884,10 @@ gint width, height; gint dest_x, dest_y; + g_return_val_if_fail (pm != NULL, FALSE); + g_return_val_if_fail (pm->pixmap != None, FALSE); + g_return_val_if_fail (pm->mask != None, FALSE); + destw = gdk_xid_table_lookup (pm->pixmap); if (destw) { @@ -934,6 +942,7 @@ TRACE ("entering xfwmPixmapLoad"); + g_return_val_if_fail (pm != NULL, FALSE); g_return_val_if_fail (dir != NULL, FALSE); g_return_val_if_fail (file != NULL, FALSE); Modified: xfwm4/trunk/src/netwm.c =================================================================== --- xfwm4/trunk/src/netwm.c 2006-08-21 14:52:02 UTC (rev 22846) +++ xfwm4/trunk/src/netwm.c 2006-08-21 20:13:05 UTC (rev 22847) @@ -329,7 +329,7 @@ { clientToggleSticky (c, TRUE); } - frameDraw (c, FALSE, FALSE); + frameDraw (c, FALSE); } } @@ -426,7 +426,7 @@ clientSetNetState (c); clientWindowType (c); } - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } if ((first == display_info->atoms[NET_WM_STATE_FULLSCREEN]) || @@ -536,7 +536,7 @@ FLAG_TOGGLE (c->flags, CLIENT_FLAG_SKIP_TASKBAR); clientSetNetState (c); } - frameDraw (c, TRUE, FALSE); + frameDraw (c, TRUE); } } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits