[balsa/gtk3] Check for window being destroyed



commit e7986d3faafc329297e464c4fb832cfd15336feb
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Fri Aug 16 20:14:44 2013 -0400

    Check for window being destroyed
    
        * src/sendmsg-window.c (sw_close_activated): mark window as
        being destroyed;
        (sw_get_action): check for window being destroyed, and return
        NULL if so;
        (sw_action_set_enabled), (sw_action_get_enabled),
        (sw_action_set_active), (sw_action_get_active): check for NULL
        action.

 ChangeLog            |   10 ++++++++++
 src/sendmsg-window.c |   26 ++++++++++++++++++--------
 2 files changed, 28 insertions(+), 8 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 9ea9277..269e32a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2013-08-16  Peter Bloomfield
+
+       * src/sendmsg-window.c (sw_close_activated): mark window as
+       being destroyed;
+       (sw_get_action): check for window being destroyed, and return
+       NULL if so;
+       (sw_action_set_enabled), (sw_action_get_enabled),
+       (sw_action_set_active), (sw_action_get_active): check for NULL
+       action.
+
 2013-08-15  Peter Bloomfield
 
        * src/main-window.c (bw_get_action): wrapper for
diff --git a/src/sendmsg-window.c b/src/sendmsg-window.c
index 9f54004..d46ea03 100644
--- a/src/sendmsg-window.c
+++ b/src/sendmsg-window.c
@@ -575,6 +575,8 @@ sw_close_activated(GSimpleAction * action,
     BalsaSendmsg *bsmsg = data;
 
     BALSA_DEBUG_MSG("close_window_cb: start\n");
+    g_object_set_data(G_OBJECT(bsmsg->window), "destroying",
+                      GINT_TO_POINTER(TRUE));
     if(!delete_handler(bsmsg))
        gtk_widget_destroy(bsmsg->window);
     BALSA_DEBUG_MSG("close_window_cb: end\n");
@@ -981,6 +983,9 @@ sw_get_action(BalsaSendmsg * bsmsg, const gchar * action_name)
 {
     GAction *action;
 
+    if (g_object_get_data(G_OBJECT(bsmsg->window), "destroying"))
+        return NULL;
+
     action = g_action_map_lookup_action(G_ACTION_MAP(bsmsg->window),
                                         action_name);
     if (!action)
@@ -997,7 +1002,8 @@ sw_action_set_enabled(BalsaSendmsg * bsmsg,
     GAction *action;
 
     action = sw_get_action(bsmsg, action_name);
-    g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled);
+    if (action)
+        g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled);
 }
 
 /*
@@ -1024,7 +1030,7 @@ sw_action_get_enabled(BalsaSendmsg * bsmsg,
     GAction *action;
 
     action = sw_get_action(bsmsg, action_name);
-    return g_action_get_enabled(action);
+    return action ? g_action_get_enabled(action) : FALSE;
 }
 #endif                          /* HAVE_GTKSOURCEVIEW */
 
@@ -1037,7 +1043,8 @@ sw_action_set_active(BalsaSendmsg * bsmsg,
     GAction *action;
 
     action = sw_get_action(bsmsg, action_name);
-    g_action_change_state(action, g_variant_new_boolean(state));
+    if (action)
+        g_action_change_state(action, g_variant_new_boolean(state));
 }
 
 static gboolean
@@ -1045,13 +1052,16 @@ sw_action_get_active(BalsaSendmsg * bsmsg,
                      const gchar  * action_name)
 {
     GAction *action;
-    GVariant *state;
-    gboolean retval;
+    gboolean retval = FALSE;
 
     action = sw_get_action(bsmsg, action_name);
-    state = g_action_get_state(action);
-    retval = g_variant_get_boolean(state);
-    g_variant_unref(state);
+    if (action) {
+        GVariant *state;
+
+        state = g_action_get_state(action);
+        retval = g_variant_get_boolean(state);
+        g_variant_unref(state);
+    }
 
     return retval;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]