Some fixes for the pager popups, and avoid a crash if you destroy a popup while it is going to be shown later by a delay.
This commit is contained in:
parent
056295a8ad
commit
33328583a1
2 changed files with 27 additions and 15 deletions
|
@ -65,6 +65,8 @@ ObPopup *popup_new(void)
|
|||
void popup_free(ObPopup *self)
|
||||
{
|
||||
if (self) {
|
||||
popup_hide(self); /* make sure it's not showing or is being delayed and
|
||||
will be shown */
|
||||
XDestroyWindow(ob_display, self->bg);
|
||||
XDestroyWindow(ob_display, self->text);
|
||||
RrAppearanceFree(self->a_bg);
|
||||
|
|
|
@ -57,7 +57,7 @@ static void screen_tell_ksplash(void);
|
|||
static void screen_fallback_focus(void);
|
||||
|
||||
guint screen_num_desktops;
|
||||
guint screen_num_monitors;
|
||||
guint screen_num_monitors = 0;
|
||||
guint screen_desktop;
|
||||
guint screen_last_desktop;
|
||||
gboolean screen_showing_desktop;
|
||||
|
@ -77,7 +77,7 @@ static GSList *struts_left = NULL;
|
|||
static GSList *struts_right = NULL;
|
||||
static GSList *struts_bottom = NULL;
|
||||
|
||||
static ObPagerPopup **desktop_popup;
|
||||
static ObPagerPopup **desktop_popup = NULL;
|
||||
|
||||
/*! The number of microseconds that you need to be on a desktop before it will
|
||||
replace the remembered "last desktop" */
|
||||
|
@ -355,20 +355,19 @@ void screen_startup(gboolean reconfig)
|
|||
|
||||
if (reconfig) {
|
||||
guint i;
|
||||
|
||||
/* recreate the pager popups to use any new theme stuff. it was
|
||||
freed in screen_shutdown() already. */
|
||||
desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
|
||||
for (i = 0; i < screen_num_monitors; i++) {
|
||||
desktop_popup[i] = pager_popup_new();
|
||||
pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
|
||||
|
||||
/* update the pager popup's width */
|
||||
pager_popup_text_width_to_strings(desktop_popup[i],
|
||||
screen_desktop_names,
|
||||
screen_num_desktops);
|
||||
}
|
||||
|
||||
return;
|
||||
} else {
|
||||
desktop_popup = NULL;
|
||||
}
|
||||
|
||||
/* get the initial size */
|
||||
|
@ -460,10 +459,10 @@ void screen_shutdown(gboolean reconfig)
|
|||
{
|
||||
guint i;
|
||||
|
||||
for (i = 0; i < screen_num_monitors; i++) {
|
||||
for (i = 0; i < screen_num_monitors; i++)
|
||||
pager_popup_free(desktop_popup[i]);
|
||||
}
|
||||
g_free(desktop_popup);
|
||||
desktop_popup = NULL;
|
||||
|
||||
if (reconfig)
|
||||
return;
|
||||
|
@ -510,6 +509,7 @@ void screen_resize(void)
|
|||
screen_update_areas();
|
||||
dock_configure();
|
||||
|
||||
/* make sure all windows are visible */
|
||||
for (it = client_list; it; it = g_list_next(it))
|
||||
client_move_onscreen(it->data, FALSE);
|
||||
}
|
||||
|
@ -1340,22 +1340,32 @@ typedef struct {
|
|||
|
||||
void screen_update_areas(void)
|
||||
{
|
||||
guint i, j;
|
||||
guint i, j, onum;
|
||||
gulong *dims;
|
||||
GList *it;
|
||||
GSList *sit;
|
||||
|
||||
onum = screen_num_monitors;
|
||||
|
||||
g_free(monitor_area);
|
||||
extensions_xinerama_screens(&monitor_area, &screen_num_monitors);
|
||||
|
||||
if (!desktop_popup) {
|
||||
desktop_popup = g_new(ObPagerPopup*, screen_num_monitors);
|
||||
for (i = 0; i < screen_num_monitors; i++) {
|
||||
if (screen_num_monitors < onum) {
|
||||
/* free some of the pager popups */
|
||||
for (i = screen_num_monitors; i < onum; ++i)
|
||||
pager_popup_free(desktop_popup[i]);
|
||||
desktop_popup = g_renew(ObPagerPopup*, desktop_popup,
|
||||
screen_num_monitors);
|
||||
}
|
||||
else {
|
||||
/* add some more pager popups */
|
||||
desktop_popup = g_renew(ObPagerPopup*, desktop_popup,
|
||||
screen_num_monitors);
|
||||
for (i = onum; i < screen_num_monitors; ++i) {
|
||||
desktop_popup[i] = pager_popup_new();
|
||||
pager_popup_height(desktop_popup[i], POPUP_HEIGHT);
|
||||
|
||||
if (screen_desktop_names)
|
||||
/* update the pager popup's width */
|
||||
if (screen_desktop_names) /* the areas are initialized before the
|
||||
desktop names */
|
||||
pager_popup_text_width_to_strings(desktop_popup[i],
|
||||
screen_desktop_names,
|
||||
screen_num_desktops);
|
||||
|
|
Loading…
Reference in a new issue