From ca23bfa67ad5d4447d54b2a46a812c7a5e8868bf Mon Sep 17 00:00:00 2001 From: sebastid Date: Thu, 19 May 2005 04:38:32 +0000 Subject: [PATCH] Fix gqview segv. The border wasn't removed from the containers client list. SVN revision: 14851 --- src/bin/e_border.c | 69 +++++++++++++++++++++++-------------------- src/bin/e_container.c | 16 ++++------ src/bin/e_manager.c | 6 ++++ 3 files changed, 49 insertions(+), 42 deletions(-) diff --git a/src/bin/e_border.c b/src/bin/e_border.c index fd6064218..c607b642a 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -2924,7 +2924,6 @@ _e_border_eval(E_Border *bd) evas_object_del(bd->bg_object); } o = edje_object_add(bd->bg_evas); - bd->bg_object = o; snprintf(buf, sizeof(buf), "widgets/border/%s/border", bd->client.border.name); ok = e_theme_edje_object_set(o, "base/theme/borders", buf); @@ -2932,6 +2931,7 @@ _e_border_eval(E_Border *bd) { const char *shape_option; + bd->bg_object = o; shape_option = edje_object_data_get(o, "shaped"); if (shape_option) { @@ -2975,6 +2975,8 @@ _e_border_eval(E_Border *bd) } else { + evas_object_del(o); + bd->bg_object = NULL; l = 0; r = 0; t = 0; @@ -2990,37 +2992,40 @@ _e_border_eval(E_Border *bd) bd->h += (bd->client_inset.t + bd->client_inset.b); bd->changes.size = 1; ecore_x_window_move(bd->client.shell_win, l, t); - edje_object_signal_callback_add(o, "move_start", "*", - _e_border_cb_signal_move_start, bd); - edje_object_signal_callback_add(o, "move_stop", "*", - _e_border_cb_signal_move_stop, bd); - edje_object_signal_callback_add(o, "resize_tl_start", "*", - _e_border_cb_signal_resize_tl_start, bd); - edje_object_signal_callback_add(o, "resize_t_start", "*", - _e_border_cb_signal_resize_t_start, bd); - edje_object_signal_callback_add(o, "resize_tr_start", "*", - _e_border_cb_signal_resize_tr_start, bd); - edje_object_signal_callback_add(o, "resize_r_start", "*", - _e_border_cb_signal_resize_r_start, bd); - edje_object_signal_callback_add(o, "resize_br_start", "*", - _e_border_cb_signal_resize_br_start, bd); - edje_object_signal_callback_add(o, "resize_b_start", "*", - _e_border_cb_signal_resize_b_start, bd); - edje_object_signal_callback_add(o, "resize_bl_start", "*", - _e_border_cb_signal_resize_bl_start, bd); - edje_object_signal_callback_add(o, "resize_l_start", "*", - _e_border_cb_signal_resize_l_start, bd); - edje_object_signal_callback_add(o, "resize_stop", "*", - _e_border_cb_signal_resize_stop, bd); - edje_object_signal_callback_add(o, "action", "*", - _e_border_cb_signal_action, bd); - edje_object_signal_callback_add(o, "drag", "*", - _e_border_cb_signal_drag, bd); - if (bd->focused) - edje_object_signal_emit(bd->bg_object, "active", ""); - evas_object_move(o, 0, 0); - evas_object_resize(o, bd->w, bd->h); - evas_object_show(o); + if (bd->bg_object) + { + edje_object_signal_callback_add(bd->bg_object, "move_start", "*", + _e_border_cb_signal_move_start, bd); + edje_object_signal_callback_add(bd->bg_object, "move_stop", "*", + _e_border_cb_signal_move_stop, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_tl_start", "*", + _e_border_cb_signal_resize_tl_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_t_start", "*", + _e_border_cb_signal_resize_t_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_tr_start", "*", + _e_border_cb_signal_resize_tr_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_r_start", "*", + _e_border_cb_signal_resize_r_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_br_start", "*", + _e_border_cb_signal_resize_br_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_b_start", "*", + _e_border_cb_signal_resize_b_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_bl_start", "*", + _e_border_cb_signal_resize_bl_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_l_start", "*", + _e_border_cb_signal_resize_l_start, bd); + edje_object_signal_callback_add(bd->bg_object, "resize_stop", "*", + _e_border_cb_signal_resize_stop, bd); + edje_object_signal_callback_add(bd->bg_object, "action", "*", + _e_border_cb_signal_action, bd); + edje_object_signal_callback_add(bd->bg_object, "drag", "*", + _e_border_cb_signal_drag, bd); + if (bd->focused) + edje_object_signal_emit(bd->bg_object, "active", ""); + evas_object_move(bd->bg_object, 0, 0); + evas_object_resize(bd->bg_object, bd->w, bd->h); + evas_object_show(bd->bg_object); + } bd->client.border.changed = 0; if (bd->icon_object) diff --git a/src/bin/e_container.c b/src/bin/e_container.c index 4eb56048a..db879257d 100644 --- a/src/bin/e_container.c +++ b/src/bin/e_container.c @@ -549,17 +549,13 @@ e_container_border_add(E_Border *bd) void e_container_border_remove(E_Border *bd) { - int pos; + int i; - if (bd->layer == 0) pos = 0; - else if ((bd->layer > 0) && (bd->layer <= 50)) pos = 1; - else if ((bd->layer > 50) && (bd->layer <= 100)) pos = 2; - else if ((bd->layer > 100) && (bd->layer <= 150)) pos = 3; - else if ((bd->layer > 150) && (bd->layer <= 200)) pos = 4; - else pos = 5; - - bd->zone->container->layers[pos].clients = - evas_list_remove(bd->zone->container->layers[pos].clients, bd); + for (i = 0; i < 7; i++) + { + bd->zone->container->layers[i].clients = + evas_list_remove(bd->zone->container->layers[i].clients, bd); + } } void diff --git a/src/bin/e_manager.c b/src/bin/e_manager.c index 6f62b487a..079ba898a 100644 --- a/src/bin/e_manager.c +++ b/src/bin/e_manager.c @@ -92,6 +92,10 @@ e_manager_new(Ecore_X_Window root) if (h) man->handlers = evas_list_append(man->handlers, h); h = ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _e_manager_cb_key_down, man); if (h) man->handlers = evas_list_append(man->handlers, h); + + /* setup hints */ + e_hints_manager_init(man); + return man; } @@ -273,6 +277,8 @@ e_manager_resize(E_Manager *man, int w, int h) con = l->data; e_container_resize(con, man->w, man->h); } + + ecore_x_netwm_desk_size_set(man->root, man->w, man->h); } void