summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--endless/eoswindow.c58
1 files changed, 40 insertions, 18 deletions
diff --git a/endless/eoswindow.c b/endless/eoswindow.c
index 1e963f4..5364b49 100644
--- a/endless/eoswindow.c
+++ b/endless/eoswindow.c
@@ -540,7 +540,6 @@ eos_window_class_init (EosWindowClass *klass)
widget_class->unmap = eos_window_unmap;
widget_class->show = eos_window_show;
container_class->forall = eos_window_forall;
- widget_class->delete_event = eos_window_default_delete;
/**
* EosWindow:application:
@@ -569,27 +568,50 @@ eos_window_class_init (EosWindowClass *klass)
g_object_class_install_properties (object_class, NPROPS, eos_window_props);
}
+#if GTK_CHECK_VERSION (3, 10, 0)
+#define our_window_close(w) gtk_window_close (w)
+#else
+static gboolean
+queue_close (gpointer user_data)
+{
+ GtkWidget *window = user_data;
+
+ GdkEvent *event = gdk_event_new (GDK_DELETE);
+
+ event->any.window = gtk_widget_get_window (window);
+ event->any.send_event = TRUE;
+
+ gtk_main_do_event (event);
+
+ gdk_event_free (event);
+
+ return G_SOURCE_REMOVE;
+}
+
static void
-on_minimize_clicked_cb (GtkWidget* top_bar,
- gpointer user_data)
+our_window_close (GtkWindow *window)
{
- if (user_data != NULL)
- {
- gtk_window_iconify (GTK_WINDOW (user_data));
- }
+ if (!gtk_widget_get_realized (GTK_WIDGET (window)))
+ return;
+
+ gdk_threads_add_idle (queue_close, window);
}
+#endif /* GTK_CHECK_VERSION (3, 10, 0) */
static void
-on_close_clicked_cb (GtkWidget* top_bar,
- gpointer user_data)
+on_minimize_clicked_cb (GtkWidget* top_bar)
{
- if (user_data != NULL)
- {
- // We don't actually care about the return value, the default "delete-event" handler
- // will take care of closing windows for us
- gboolean dummy = FALSE;
- g_signal_emit_by_name (G_OBJECT (user_data), "delete-event", NULL, &dummy);
- }
+ GtkWidget *window = gtk_widget_get_toplevel (top_bar);
+
+ gtk_window_iconify (GTK_WINDOW (window));
+}
+
+static void
+on_close_clicked_cb (GtkWidget* top_bar)
+{
+ GtkWidget *window = gtk_widget_get_toplevel (top_bar);
+
+ our_window_close (GTK_WINDOW (window));
}
/* Make sure that the edge finishing does not catch input events */
@@ -680,9 +702,9 @@ eos_window_init (EosWindow *self)
gtk_window_maximize (GTK_WINDOW (self));
g_signal_connect (self->priv->top_bar, "minimize-clicked",
- G_CALLBACK (on_minimize_clicked_cb), self);
+ G_CALLBACK (on_minimize_clicked_cb), NULL);
g_signal_connect (self->priv->top_bar, "close-clicked",
- G_CALLBACK (on_close_clicked_cb), self);
+ G_CALLBACK (on_close_clicked_cb), NULL);
eos_window_set_page_manager (self,
EOS_PAGE_MANAGER (eos_page_manager_new ()));