X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Ffocus_cycle_popup.c;h=015330bda32f2be41a9b25b972568f0b360ae349;hb=4940d007cce43a135f1b448902f5a3571dbce62a;hp=c00ee8407b5788d5785e42c8953007c7afc5cd7a;hpb=c090f630114e6a40359aa92d18e05058bbe2282a;p=chaz%2Fopenbox diff --git a/openbox/focus_cycle_popup.c b/openbox/focus_cycle_popup.c index c00ee840..015330bd 100644 --- a/openbox/focus_cycle_popup.c +++ b/openbox/focus_cycle_popup.c @@ -74,14 +74,13 @@ static ObFocusCyclePopup popup; /*! This popup shows a single window */ static ObIconPopup *single_popup; -static gboolean cycle_iconic_windows; -static gboolean cycle_all_desktops; -static gboolean cycle_dock_windows; -static gboolean cycle_desktop_windows; - static gchar *popup_get_name (ObClient *c); static void popup_setup (ObFocusCyclePopup *p, - gboolean create_targets); + gboolean create_targets, + gboolean iconic_windows, + gboolean all_desktops, + gboolean dock_windows, + gboolean desktop_windows); static void popup_render (ObFocusCyclePopup *p, const ObClient *c); @@ -156,7 +155,9 @@ void focus_cycle_popup_shutdown(gboolean reconfig) RrAppearanceFree(popup.a_bg); } -static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets) +static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets, + gboolean iconic_windows, gboolean all_desktops, + gboolean dock_windows, gboolean desktop_windows) { gint maxwidth, n; GList *it; @@ -174,10 +175,10 @@ static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets) ObClient *ft = it->data; if (focus_cycle_target_valid(ft, - cycle_iconic_windows, - cycle_all_desktops, - cycle_dock_windows, - cycle_desktop_windows)) + iconic_windows, + all_desktops, + dock_windows, + desktop_windows)) { gchar *text = popup_get_name(ft); @@ -320,6 +321,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c) /* set up the hilite texture for the background */ p->a_bg->texture[0].data.rgba.width = rgbaw; p->a_bg->texture[0].data.rgba.height = rgbah; + p->a_bg->texture[0].data.rgba.alpha = 0xff; p->hilite_rgba = g_new(RrPixel32, rgbaw * rgbah); p->a_bg->texture[0].data.rgba.data = p->hilite_rgba; @@ -419,6 +421,8 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c) icon = client_icon(target->client, innerw, innerh); p->a_icon->texture[0].data.rgba.width = icon->width; p->a_icon->texture[0].data.rgba.height = icon->height; + p->a_icon->texture[0].data.rgba.alpha = + target->client->iconic ? OB_ICONIC_ALPHA : 0xff; p->a_icon->texture[0].data.rgba.data = icon->data; /* draw the icon */ @@ -444,13 +448,9 @@ void focus_cycle_popup_show(ObClient *c, gboolean iconic_windows, g_assert(c != NULL); /* do this stuff only when the dialog is first showing */ - if (!popup.mapped) { - cycle_iconic_windows = iconic_windows; - cycle_all_desktops = all_desktops; - cycle_dock_windows = dock_windows; - cycle_desktop_windows = desktop_windows; - popup_setup(&popup, TRUE); - } + if (!popup.mapped) + popup_setup(&popup, TRUE, iconic_windows, all_desktops, + dock_windows, desktop_windows); g_assert(popup.targets != NULL); popup_render(&popup, c); @@ -465,13 +465,16 @@ void focus_cycle_popup_show(ObClient *c, gboolean iconic_windows, void focus_cycle_popup_hide() { + gulong ignore_start; + + ignore_start = event_start_ignore_all_enters(); + XUnmapWindow(ob_display, popup.bg); XFlush(ob_display); - popup.mapped = FALSE; + event_end_ignore_all_enters(ignore_start); - /* kill enter events cause by this unmapping */ - event_ignore_all_queued_enters(); + popup.mapped = FALSE; while(popup.targets) { ObFocusCyclePopupTarget *t = popup.targets->data; @@ -502,11 +505,8 @@ void focus_cycle_popup_single_show(struct _ObClient *c, if (!popup.mapped) { Rect *a; - cycle_iconic_windows = iconic_windows; - cycle_all_desktops = all_desktops; - cycle_dock_windows = dock_windows; - cycle_desktop_windows = desktop_windows; - popup_setup(&popup, FALSE); + popup_setup(&popup, FALSE, iconic_windows, all_desktops, + dock_windows, desktop_windows); g_assert(popup.targets == NULL); /* position the popup */