[ekiga/ds-gtk-application] EkigaApp: Make sure there is only one call window at any time.



commit 9f6f95a5635fe9c72b4a7048f930ca37ef05d5b0
Author: Damien Sandras <dsandras seconix com>
Date:   Sun Nov 2 14:07:53 2014 +0100

    EkigaApp: Make sure there is only one call window at any time.

 lib/engine/gui/gtk-frontend/ekiga-app.cpp |   25 +++++++++++++++++++++----
 1 files changed, 21 insertions(+), 4 deletions(-)
---
diff --git a/lib/engine/gui/gtk-frontend/ekiga-app.cpp b/lib/engine/gui/gtk-frontend/ekiga-app.cpp
index 2670bc7..5192e87 100644
--- a/lib/engine/gui/gtk-frontend/ekiga-app.cpp
+++ b/lib/engine/gui/gtk-frontend/ekiga-app.cpp
@@ -104,6 +104,7 @@ struct _GmApplicationPrivate
 
   GtkWidget *main_window;
   GtkWidget *chat_window;
+  GtkWidget *call_window;
 
   boost::shared_ptr<Ekiga::Settings> video_devices_settings;
 
@@ -113,6 +114,18 @@ struct _GmApplicationPrivate
 G_DEFINE_TYPE (GmApplication, gm_application, GTK_TYPE_APPLICATION);
 
 /* Private helpers */
+static void
+call_window_destroyed_cb (G_GNUC_UNUSED GtkWidget *widget,
+                          gpointer data)
+{
+  g_return_if_fail (GM_IS_APPLICATION (data));
+
+  GmApplication *self = GM_APPLICATION (data);
+  if (self->priv->call_window)
+    self->priv->call_window = NULL;
+}
+
+
 static gboolean
 option_context_parse (GOptionContext *context,
                       gchar **arguments,
@@ -831,15 +844,19 @@ GNU GPL for all the rest of the software thus combined.")
 GtkWidget *
 gm_application_show_call_window (GmApplication *self)
 {
-  GtkWidget *call_window = NULL;
   g_return_val_if_fail (GM_IS_APPLICATION (self), NULL);
 
   self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GM_TYPE_APPLICATION, GmApplicationPrivate);
 
-  call_window = call_window_new (self);
-  gtk_window_present (GTK_WINDOW (call_window));
+  if (self->priv->call_window)
+    gtk_window_present (GTK_WINDOW (self->priv->call_window));
+  else
+    self->priv->call_window = call_window_new (self);
+
+  g_signal_connect (G_OBJECT (self->priv->call_window), "destroy",
+                    G_CALLBACK (call_window_destroyed_cb), self);
 
-  return call_window;
+  return self->priv->call_window;
 }
 
 


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