[gimp/soc-2010-cage] app: make sure tool overlay dialogs close on Escape when they are focussed
- From: Michael Muré <mmure src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/soc-2010-cage] app: make sure tool overlay dialogs close on Escape when they are focussed
- Date: Wed, 30 Jun 2010 22:05:41 +0000 (UTC)
commit 842fe0f86d208007ea3b1ff5c2d375522cc95dfc
Author: Michael Natterer <mitch gimp org>
Date: Thu Jun 3 22:04:54 2010 +0200
app: make sure tool overlay dialogs close on Escape when they are focussed
app/widgets/gimptooloverlay.c | 66 ++++++++++++++++++++++++++++++++---------
1 files changed, 52 insertions(+), 14 deletions(-)
---
diff --git a/app/widgets/gimptooloverlay.c b/app/widgets/gimptooloverlay.c
index 9b03e15..26aa478 100644
--- a/app/widgets/gimptooloverlay.c
+++ b/app/widgets/gimptooloverlay.c
@@ -2,7 +2,7 @@
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimptooloverlay.c
- * Copyright (C) 2009 Michael Natterer <mitch gimp org>
+ * Copyright (C) 2009-2010 Michael Natterer <mitch gimp org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,6 +21,7 @@
#include "config.h"
#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
#include "libgimpwidgets/gimpwidgets.h"
@@ -48,22 +49,24 @@ struct _ResponseData
};
-static void gimp_tool_overlay_destroy (GtkObject *object);
+static void gimp_tool_overlay_destroy (GtkObject *object);
-static void gimp_tool_overlay_size_request (GtkWidget *widget,
- GtkRequisition *requisition);
-static void gimp_tool_overlay_size_allocate (GtkWidget *widget,
- GtkAllocation *allocation);
-static gboolean gimp_tool_overlay_expose (GtkWidget *widget,
- GdkEventExpose *eevent);
+static void gimp_tool_overlay_size_request (GtkWidget *widget,
+ GtkRequisition *requisition);
+static void gimp_tool_overlay_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation);
+static gboolean gimp_tool_overlay_expose (GtkWidget *widget,
+ GdkEventExpose *eevent);
-static void gimp_tool_overlay_forall (GtkContainer *container,
- gboolean include_internals,
- GtkCallback callback,
- gpointer callback_data);
+static void gimp_tool_overlay_forall (GtkContainer *container,
+ gboolean include_internals,
+ GtkCallback callback,
+ gpointer callback_data);
-static ResponseData * get_response_data (GtkWidget *widget,
- gboolean create);
+static void gimp_tool_overlay_close (GimpToolOverlay *overlay);
+
+static ResponseData * get_response_data (GtkWidget *widget,
+ gboolean create);
G_DEFINE_TYPE (GimpToolOverlay, gimp_tool_overlay, GTK_TYPE_BIN)
@@ -88,6 +91,8 @@ gimp_tool_overlay_class_init (GimpToolOverlayClass *klass)
container_class->forall = gimp_tool_overlay_forall;
+ klass->close = gimp_tool_overlay_close;
+
signals[RESPONSE] =
g_signal_new ("response",
G_OBJECT_CLASS_TYPE (klass),
@@ -106,6 +111,9 @@ gimp_tool_overlay_class_init (GimpToolOverlayClass *klass)
NULL, NULL,
gimp_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ gtk_binding_entry_add_signal (gtk_binding_set_by_class (klass),
+ GDK_Escape, 0, "close", 0);
}
static void
@@ -312,6 +320,36 @@ gimp_tool_overlay_forall (GtkContainer *container,
}
}
+static void
+gimp_tool_overlay_close (GimpToolOverlay *overlay)
+{
+ GList *children;
+ GList *list;
+ ResponseData *ad = NULL;
+
+ children = gtk_container_get_children (GTK_CONTAINER (overlay->action_area));
+
+ for (list = children; list; list = g_list_next (list))
+ {
+ GtkWidget *child = list->data;
+
+ ad = get_response_data (child, FALSE);
+
+ if (ad->response_id == GTK_RESPONSE_CLOSE ||
+ ad->response_id == GTK_RESPONSE_CANCEL)
+ {
+ break;
+ }
+
+ ad = NULL;
+ }
+
+ g_list_free (children);
+
+ if (ad)
+ gimp_tool_overlay_response (overlay, ad->response_id);
+}
+
GtkWidget *
gimp_tool_overlay_new (GimpToolInfo *tool_info,
const gchar *desc,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]