From e69c53fc505de20e6f0c79df9bd54c84cda4756c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 10 Jan 2013 09:31:09 +0000 Subject: [PATCH] backport previous internal dialog redraw fix SVN revision: 82536 --- ChangeLog | 4 ++++ NEWS | 1 + src/bin/e_border.c | 26 +++++++++++++------------- src/bin/e_win.c | 12 ++++++++++++ 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 05fe02599..d23fd70a6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-01-10 Mike Blumenkrantz + + * fixed bug where internal dialogs would not redraw after unfullscreening + 2013-01-10 Deon Thomas * Fixed bug with desktop config profile where conf module version variable was misnamed diff --git a/NEWS b/NEWS index 8c31f1b1b..126dbb731 100644 --- a/NEWS +++ b/NEWS @@ -26,3 +26,4 @@ Fixes: * Tasks gadgets now apply the selected style * fixed bug where window border insets were not applied to initial positioning geometry, causing them to be placed incorrectly * Fixed bug with desktop config profile where conf module version variable was misnamed + * fixed bug where internal dialogs would not redraw after unfullscreening diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 87f2aa863..8a3387631 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -3159,10 +3159,10 @@ e_border_unfullscreen(E_Border *bd) screen_size.width = -1; screen_size.height = -1; } - e_border_move_resize(bd, - bd->saved.x + bd->zone->x, - bd->saved.y + bd->zone->y, - bd->saved.w, bd->saved.h); + _e_border_move_resize_internal(bd, + bd->zone->x + bd->saved.x, + bd->zone->y + bd->saved.y, + bd->saved.w, bd->saved.h, 0, 1); if (bd->saved.maximized) e_border_maximize(bd, (e_config->maximize_policy & E_MAXIMIZE_TYPE) | @@ -7234,7 +7234,7 @@ _e_border_eval0(E_Border *bd) bd->changes.border = 0; /* fetch any info queued to be fetched */ - if (bd->client.netwm.fetch.state) + if (bd->changes.prop || bd->client.netwm.fetch.state) { e_hints_window_state_get(bd); bd->client.netwm.fetch.state = 0; @@ -7337,13 +7337,13 @@ _e_border_eval0(E_Border *bd) bd->changes.icon = 1; rem_change = 1; } - if (bd->client.icccm.fetch.state) + if (bd->changes.prop || bd->client.icccm.fetch.state) { bd->client.icccm.state = ecore_x_icccm_state_get(bd->client.win); bd->client.icccm.fetch.state = 0; rem_change = 1; } - if (bd->client.e.fetch.state) + if (bd->changes.prop || bd->client.e.fetch.state) { e_hints_window_e_state_get(bd); bd->client.e.fetch.state = 0; @@ -7412,7 +7412,7 @@ _e_border_eval0(E_Border *bd) bd->client.e.fetch.profile = 0; } #endif - if (bd->client.netwm.fetch.type) + if (bd->changes.prop || bd->client.netwm.fetch.type) { e_hints_window_type_get(bd); if ((!bd->lock_border) || (!bd->client.border.name)) @@ -7469,7 +7469,7 @@ _e_border_eval0(E_Border *bd) bd->client.icccm.fetch.command = 0; rem_change = 1; } - if (bd->client.icccm.fetch.hints) + if (bd->changes.prop || bd->client.icccm.fetch.hints) { Eina_Bool accepts_focus, is_urgent; @@ -7501,7 +7501,7 @@ _e_border_eval0(E_Border *bd) bd->client.icccm.fetch.hints = 0; rem_change = 1; } - if (bd->client.icccm.fetch.size_pos_hints) + if (bd->changes.prop || bd->client.icccm.fetch.size_pos_hints) { Eina_Bool request_pos; @@ -7913,7 +7913,7 @@ _e_border_eval0(E_Border *bd) } bd->need_shape_merge = 1; } - if (bd->client.mwm.fetch.hints) + if (bd->changes.prop || bd->client.mwm.fetch.hints) { int pb; @@ -7996,7 +7996,7 @@ _e_border_eval0(E_Border *bd) fprintf(stderr, "internal position has been updated [%i, %i]\n", bd->client.e.state.video_position.x, bd->client.e.state.video_position.y); } - if (bd->client.netwm.update.state) + if (bd->changes.prop || bd->client.netwm.update.state) { e_hints_window_state_set(bd); /* Some stats might change the border, like modal */ @@ -8401,6 +8401,7 @@ _e_border_eval0(E_Border *bd) bd->client.border.changed = 0; } + bd->changes.prop = 0; if (rem_change) e_remember_update(bd); if (change_urgent) @@ -9147,7 +9148,6 @@ _e_border_eval(E_Border *bd) bd->new_client = 0; bd->changed = 0; bd->changes.stack = 0; - bd->changes.prop = 0; if ((bd->take_focus) || (bd->want_focus)) { diff --git a/src/bin/e_win.c b/src/bin/e_win.c index 3dbf2c9c9..ef98a1946 100644 --- a/src/bin/e_win.c +++ b/src/bin/e_win.c @@ -8,6 +8,7 @@ static void _e_win_state_update(E_Win *win); static void _e_win_cb_move(Ecore_Evas *ee); static void _e_win_cb_resize(Ecore_Evas *ee); static void _e_win_cb_delete(Ecore_Evas *ee); +static void _e_win_cb_state(Ecore_Evas *ee); /* local subsystem globals */ static Eina_List *wins = NULL; @@ -225,6 +226,7 @@ e_win_new(E_Container *con) ecore_evas_callback_move_set(win->ecore_evas, _e_win_cb_move); ecore_evas_callback_resize_set(win->ecore_evas, _e_win_cb_resize); ecore_evas_callback_delete_request_set(win->ecore_evas, _e_win_cb_delete); + ecore_evas_callback_state_change_set(win->ecore_evas, _e_win_cb_state); win->evas = ecore_evas_get(win->ecore_evas); ecore_evas_name_class_set(win->ecore_evas, "E", "_e_internal_window"); ecore_evas_title_set(win->ecore_evas, "E"); @@ -698,3 +700,13 @@ _e_win_cb_delete(Ecore_Evas *ee) if (win->cb_delete) win->cb_delete(win); } +static void +_e_win_cb_state(Ecore_Evas *ee) +{ + E_Win *win; + + win = ecore_evas_data_get(ee, "E_Win"); + if (!win) return; + if (!win->border) return; + win->border->changed = win->border->changes.size = 1; +}