X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=inline;f=openbox%2Ffocus_cycle_popup.c;h=c00ee8407b5788d5785e42c8953007c7afc5cd7a;hb=c090f630114e6a40359aa92d18e05058bbe2282a;hp=a44a8cc646fbcb1df95f420d704b31ea316e07a1;hpb=b596a52fad05018d44468b58b464580a32ba354a;p=chaz%2Fopenbox diff --git a/openbox/focus_cycle_popup.c b/openbox/focus_cycle_popup.c index a44a8cc6..c00ee840 100644 --- a/openbox/focus_cycle_popup.c +++ b/openbox/focus_cycle_popup.c @@ -25,12 +25,13 @@ #include "focus_cycle.h" #include "openbox.h" #include "window.h" +#include "event.h" #include "render/render.h" #include #include -#define ICON_SIZE 48 +#define ICON_SIZE 40 #define ICON_HILITE_WIDTH 2 #define ICON_HILITE_MARGIN 1 #define OUTSIDE_BORDER 3 @@ -73,13 +74,14 @@ 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 iconic_windows, - gboolean all_desktops, - gboolean dock_windows, - gboolean desktop_windows); + gboolean create_targets); static void popup_render (ObFocusCyclePopup *p, const ObClient *c); @@ -154,9 +156,7 @@ void focus_cycle_popup_shutdown(gboolean reconfig) RrAppearanceFree(popup.a_bg); } -static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets, - gboolean iconic_windows, gboolean all_desktops, - gboolean dock_windows, gboolean desktop_windows) +static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets) { gint maxwidth, n; GList *it; @@ -174,10 +174,10 @@ static void popup_setup(ObFocusCyclePopup *p, gboolean create_targets, ObClient *ft = it->data; if (focus_cycle_target_valid(ft, - iconic_windows, - all_desktops, - dock_windows, - desktop_windows)) + cycle_iconic_windows, + cycle_all_desktops, + cycle_dock_windows, + cycle_desktop_windows)) { gchar *text = popup_get_name(ft); @@ -289,7 +289,7 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c) texth = RrMinHeight(p->a_text); /* find the height of the dialog */ - h = t + b + (icon_rows * ICON_SIZE) + (OUTSIDE_BORDER + texth); + h = t + b + (icon_rows * ICON_SIZE) + (OUTSIDE_BORDER*2 + texth); /* get the position of the text */ textx = l; @@ -429,7 +429,6 @@ static void popup_render(ObFocusCyclePopup *p, const ObClient *c) } /* draw the text */ - p->a_text->texture[0].data.text.justify = RR_JUSTIFY_CENTER; p->a_text->texture[0].data.text.string = newtarget->text; p->a_text->surface.parentx = textx; p->a_text->surface.parenty = texty; @@ -445,9 +444,13 @@ 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) - popup_setup(&popup, TRUE, iconic_windows, all_desktops, - dock_windows, desktop_windows); + 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); + } g_assert(popup.targets != NULL); popup_render(&popup, c); @@ -467,6 +470,9 @@ void focus_cycle_popup_hide() popup.mapped = FALSE; + /* kill enter events cause by this unmapping */ + event_ignore_all_queued_enters(); + while(popup.targets) { ObFocusCyclePopupTarget *t = popup.targets->data; @@ -496,8 +502,11 @@ void focus_cycle_popup_single_show(struct _ObClient *c, if (!popup.mapped) { Rect *a; - popup_setup(&popup, FALSE, iconic_windows, all_desktops, - dock_windows, desktop_windows); + cycle_iconic_windows = iconic_windows; + cycle_all_desktops = all_desktops; + cycle_dock_windows = dock_windows; + cycle_desktop_windows = desktop_windows; + popup_setup(&popup, FALSE); g_assert(popup.targets == NULL); /* position the popup */