[gimp] app: GimpDeviceManager refactoring part two
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: GimpDeviceManager refactoring part two
- Date: Mon, 28 Feb 2011 13:38:59 +0000 (UTC)
commit ee844c6395ab2c92617f856568cd68008e0e7147
Author: Michael Natterer <mitch gimp org>
Date: Mon Feb 28 14:37:00 2011 +0100
app: GimpDeviceManager refactoring part two
- change gimp_devices_get_list() to gimp_devices_get_manager()
- remove gimp_devices_get_current()
- let GimpDeviceStatus connect to the manager's "notify::current-device"
directly and remove device status updating code from gui.c
- cleanup in gimpdevices.c
app/display/gimpdisplayshell-tool-events.c | 35 ++++++++++----
app/gui/gui.c | 34 -------------
app/widgets/gimpdeviceeditor.c | 9 ++-
app/widgets/gimpdevices.c | 72 +++++++++------------------
app/widgets/gimpdevices.h | 31 ++++++------
app/widgets/gimpdevicestatus.c | 33 +++++++++----
app/widgets/gimpdevicestatus.h | 3 +-
7 files changed, 95 insertions(+), 122 deletions(-)
---
diff --git a/app/display/gimpdisplayshell-tool-events.c b/app/display/gimpdisplayshell-tool-events.c
index e5017d4..0b2bcec 100644
--- a/app/display/gimpdisplayshell-tool-events.c
+++ b/app/display/gimpdisplayshell-tool-events.c
@@ -34,6 +34,7 @@
#include "widgets/gimpcontrollerwheel.h"
#include "widgets/gimpdeviceinfo.h"
#include "widgets/gimpdeviceinfo-coords.h"
+#include "widgets/gimpdevicemanager.h"
#include "widgets/gimpdevices.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpuimanager.h"
@@ -488,13 +489,16 @@ gimp_display_shell_canvas_tool_events (GtkWidget *canvas,
(gimp_tool_control_get_motion_mode (active_tool->control) !=
GIMP_MOTION_MODE_EXACT)))
{
- GdkDisplay *gdk_display = gtk_widget_get_display (canvas);
+ GdkDisplay *gdk_display = gtk_widget_get_display (canvas);
+ GimpDeviceManager *manager;
+
+ manager = gimp_devices_get_manager (gimp);
/* don't request motion hins for XInput devices because
* the wacom driver is known to report crappy hints
* (#6901) --mitch
*/
- if (gimp_devices_get_current (gimp)->device ==
+ if (gimp_device_manager_get_current_device (manager)->device ==
gdk_display_get_core_pointer (gdk_display))
{
event_mask |= GDK_POINTER_MOTION_HINT_MASK;
@@ -1393,9 +1397,12 @@ gimp_display_shell_proximity_out (GimpDisplayShell *shell)
static void
gimp_display_shell_check_device_cursor (GimpDisplayShell *shell)
{
- GimpDeviceInfo *current_device;
+ GimpDeviceManager *manager;
+ GimpDeviceInfo *current_device;
+
+ manager = gimp_devices_get_manager (shell->display->gimp);
- current_device = gimp_devices_get_current (shell->display->gimp);
+ current_device = gimp_device_manager_get_current_device (manager);
shell->draw_cursor = ! gimp_device_info_has_cursor (current_device);
}
@@ -1460,7 +1467,9 @@ gimp_display_shell_space_pressed (GimpDisplayShell *shell,
case GIMP_SPACE_BAR_ACTION_PAN:
{
- GimpCoords coords;
+ GimpDeviceManager *manager;
+ GimpDeviceInfo *current_device;
+ GimpCoords coords;
if (! gimp_display_shell_pointer_grab (shell, event,
GDK_POINTER_MOTION_MASK |
@@ -1470,7 +1479,10 @@ gimp_display_shell_space_pressed (GimpDisplayShell *shell,
return;
}
- gimp_device_info_get_device_coords (gimp_devices_get_current (gimp),
+ manager = gimp_devices_get_manager (gimp);
+ current_device = gimp_device_manager_get_current_device (manager);
+
+ gimp_device_info_get_device_coords (current_device,
gtk_widget_get_window (shell->canvas),
&coords);
@@ -1631,14 +1643,19 @@ gimp_display_shell_get_event_coords (GimpDisplayShell *shell,
GdkModifierType *state,
guint32 *time)
{
- Gimp *gimp = gimp_display_get_gimp (shell->display);
+ Gimp *gimp = gimp_display_get_gimp (shell->display);
+ GimpDeviceManager *manager;
+ GimpDeviceInfo *current_device;
+
+ manager = gimp_devices_get_manager (gimp);
+ current_device = gimp_device_manager_get_current_device (manager);
- gimp_device_info_get_event_coords (gimp_devices_get_current (gimp),
+ gimp_device_info_get_event_coords (current_device,
gtk_widget_get_window (shell->canvas),
event,
display_coords);
- gimp_device_info_get_event_state (gimp_devices_get_current (gimp),
+ gimp_device_info_get_event_state (current_device,
gtk_widget_get_window (shell->canvas),
event,
state);
diff --git a/app/gui/gui.c b/app/gui/gui.c
index 5f45d26..fbc0013 100644
--- a/app/gui/gui.c
+++ b/app/gui/gui.c
@@ -50,7 +50,6 @@
#include "widgets/gimpcolorselectorpalette.h"
#include "widgets/gimpcontrollers.h"
#include "widgets/gimpdevices.h"
-#include "widgets/gimpdevicestatus.h"
#include "widgets/gimpdialogfactory.h"
#include "widgets/gimpdnd.h"
#include "widgets/gimprender.h"
@@ -120,9 +119,6 @@ static void gui_single_window_mode_notify (GimpGuiConfig *gui_config,
static void gui_tearoff_menus_notify (GimpGuiConfig *gui_config,
GParamSpec *pspec,
GtkUIManager *manager);
-static void gui_device_change_notify (GimpDeviceManager *manager,
- const GParamSpec *pspec,
- Gimp *gimp);
static void gui_global_buffer_changed (Gimp *gimp);
@@ -415,11 +411,6 @@ gui_restore_callback (Gimp *gimp,
NULL);
gimp_devices_init (gimp);
-
- g_signal_connect (gimp_devices_get_list (gimp), "notify::current-device",
- G_CALLBACK (gui_device_change_notify),
- gimp);
-
gimp_controllers_init (gimp);
session_init (gimp);
@@ -635,11 +626,6 @@ gui_exit_after_callback (Gimp *gimp,
gimp_render_exit (gimp);
gimp_controllers_exit (gimp);
-
- g_signal_handlers_disconnect_by_func (gimp_devices_get_list (gimp),
- gui_device_change_notify,
- gimp);
-
gimp_devices_exit (gimp);
dialogs_exit (gimp);
@@ -700,26 +686,6 @@ gui_tearoff_menus_notify (GimpGuiConfig *gui_config,
}
static void
-gui_device_change_notify (GimpDeviceManager *manager,
- const GParamSpec *pspec,
- Gimp *gimp)
-{
- GimpSessionInfo *session_info;
-
- session_info = gimp_dialog_factory_find_session_info (gimp_dialog_factory_get_singleton (),
- "gimp-device-status");
-
- if (session_info && gimp_session_info_get_widget (session_info))
- {
- GtkWidget *device_status;
-
- device_status = gtk_bin_get_child (GTK_BIN (gimp_session_info_get_widget (session_info)));
-
- gimp_device_status_update (GIMP_DEVICE_STATUS (device_status));
- }
-}
-
-static void
gui_global_buffer_changed (Gimp *gimp)
{
gimp_clipboard_set_buffer (gimp, gimp->global_buffer);
diff --git a/app/widgets/gimpdeviceeditor.c b/app/widgets/gimpdeviceeditor.c
index a1c2263..a640b3b 100644
--- a/app/widgets/gimpdeviceeditor.c
+++ b/app/widgets/gimpdeviceeditor.c
@@ -36,6 +36,7 @@
#include "gimpdeviceeditor.h"
#include "gimpdeviceinfo.h"
#include "gimpdeviceinfoeditor.h"
+#include "gimpdevicemanager.h"
#include "gimpdevices.h"
#include "gimpmessagebox.h"
#include "gimpmessagedialog.h"
@@ -221,7 +222,7 @@ gimp_device_editor_constructed (GObject *object)
g_assert (GIMP_IS_GIMP (private->gimp));
- devices = gimp_devices_get_list (private->gimp);
+ devices = GIMP_CONTAINER (gimp_devices_get_manager (private->gimp));
/* connect to "remove" before the container view does so we can get
* the notebook child stored in its model
@@ -257,7 +258,9 @@ static void
gimp_device_editor_dispose (GObject *object)
{
GimpDeviceEditorPrivate *private = GIMP_DEVICE_EDITOR_GET_PRIVATE (object);
- GimpContainer *devices = gimp_devices_get_list (private->gimp);
+ GimpContainer *devices;
+
+ devices = GIMP_CONTAINER (gimp_devices_get_manager (private->gimp));
g_signal_handlers_disconnect_by_func (devices,
gimp_device_editor_add_device,
@@ -473,7 +476,7 @@ gimp_device_editor_delete_response (GtkWidget *dialog,
{
GimpContainer *devices;
- devices = gimp_devices_get_list (private->gimp);
+ devices = GIMP_CONTAINER (gimp_devices_get_manager (private->gimp));
gimp_container_remove (devices, selected->data);
diff --git a/app/widgets/gimpdevices.c b/app/widgets/gimpdevices.c
index 0f9fc95..3de6b09 100644
--- a/app/widgets/gimpdevices.c
+++ b/app/widgets/gimpdevices.c
@@ -55,11 +55,6 @@
#define GIMP_DEVICE_MANAGER_DATA_KEY "gimp-device-manager"
-/* local function prototypes */
-
-static GimpDeviceManager * gimp_device_manager_get (Gimp *gimp);
-
-
static gboolean devicerc_deleted = FALSE;
@@ -71,7 +66,10 @@ gimp_devices_init (Gimp *gimp)
GimpDeviceManager *manager;
g_return_if_fail (GIMP_IS_GIMP (gimp));
- g_return_if_fail (gimp_device_manager_get (gimp) == NULL);
+
+ manager = g_object_get_data (G_OBJECT (gimp), GIMP_DEVICE_MANAGER_DATA_KEY);
+
+ g_return_if_fail (manager == NULL);
manager = gimp_device_manager_new (gimp);
@@ -87,9 +85,9 @@ gimp_devices_exit (Gimp *gimp)
g_return_if_fail (GIMP_IS_GIMP (gimp));
- manager = gimp_device_manager_get (gimp);
+ manager = gimp_devices_get_manager (gimp);
- g_return_if_fail (manager != NULL);
+ g_return_if_fail (GIMP_IS_DEVICE_MANAGER (manager));
g_object_set_data (G_OBJECT (gimp), GIMP_DEVICE_MANAGER_DATA_KEY, NULL);
}
@@ -99,15 +97,16 @@ gimp_devices_restore (Gimp *gimp)
{
GimpDeviceManager *manager;
GimpContext *user_context;
+ GimpDeviceInfo *current_device;
GList *list;
gchar *filename;
GError *error = NULL;
g_return_if_fail (GIMP_IS_GIMP (gimp));
- manager = gimp_device_manager_get (gimp);
+ manager = gimp_devices_get_manager (gimp);
- g_return_if_fail (manager != NULL);
+ g_return_if_fail (GIMP_IS_DEVICE_MANAGER (manager));
user_context = gimp_get_user_context (gimp);
@@ -140,11 +139,11 @@ gimp_devices_restore (Gimp *gimp)
g_free (filename);
- gimp_context_copy_properties (GIMP_CONTEXT (gimp_device_manager_get_current_device (manager)),
- user_context,
+ current_device = gimp_device_manager_get_current_device (manager);
+
+ gimp_context_copy_properties (GIMP_CONTEXT (current_device), user_context,
GIMP_DEVICE_INFO_CONTEXT_MASK);
- gimp_context_set_parent (GIMP_CONTEXT (gimp_device_manager_get_current_device (manager)),
- user_context);
+ gimp_context_set_parent (GIMP_CONTEXT (current_device), user_context);
}
void
@@ -157,9 +156,9 @@ gimp_devices_save (Gimp *gimp,
g_return_if_fail (GIMP_IS_GIMP (gimp));
- manager = gimp_device_manager_get (gimp);
+ manager = gimp_devices_get_manager (gimp);
- g_return_if_fail (manager != NULL);
+ g_return_if_fail (GIMP_IS_DEVICE_MANAGER (manager));
if (devicerc_deleted && ! always_save)
return;
@@ -195,9 +194,9 @@ gimp_devices_clear (Gimp *gimp,
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
- manager = gimp_device_manager_get (gimp);
+ manager = gimp_devices_get_manager (gimp);
- g_return_val_if_fail (manager != NULL, FALSE);
+ g_return_val_if_fail (GIMP_IS_DEVICE_MANAGER (manager), FALSE);
filename = gimp_personal_rc_file ("devicerc");
@@ -218,32 +217,18 @@ gimp_devices_clear (Gimp *gimp,
return success;
}
-GimpContainer *
-gimp_devices_get_list (Gimp *gimp)
-{
- GimpDeviceManager *manager;
-
- g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
-
- manager = gimp_device_manager_get (gimp);
-
- g_return_val_if_fail (manager != NULL, NULL);
-
- return GIMP_CONTAINER (manager);
-}
-
-GimpDeviceInfo *
-gimp_devices_get_current (Gimp *gimp)
+GimpDeviceManager *
+gimp_devices_get_manager (Gimp *gimp)
{
GimpDeviceManager *manager;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
- manager = gimp_device_manager_get (gimp);
+ manager = g_object_get_data (G_OBJECT (gimp), GIMP_DEVICE_MANAGER_DATA_KEY);
- g_return_val_if_fail (manager != NULL, NULL);
+ g_return_val_if_fail (GIMP_IS_DEVICE_MANAGER (manager), NULL);
- return gimp_device_manager_get_current_device (manager);
+ return manager;
}
void
@@ -286,9 +271,9 @@ gimp_devices_check_change (Gimp *gimp,
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (event != NULL, FALSE);
- manager = gimp_device_manager_get (gimp);
+ manager = gimp_devices_get_manager (gimp);
- g_return_val_if_fail (manager != NULL, FALSE);
+ g_return_val_if_fail (GIMP_IS_DEVICE_MANAGER (manager), FALSE);
/* It is possible that the event was propagated from a widget that does not
want extension events and therefore always sends core pointer events.
@@ -337,12 +322,3 @@ gimp_devices_check_change (Gimp *gimp,
return FALSE;
}
-
-
-/* private functions */
-
-static GimpDeviceManager *
-gimp_device_manager_get (Gimp *gimp)
-{
- return g_object_get_data (G_OBJECT (gimp), GIMP_DEVICE_MANAGER_DATA_KEY);
-}
diff --git a/app/widgets/gimpdevices.h b/app/widgets/gimpdevices.h
index cffa71d..a2cdbc8 100644
--- a/app/widgets/gimpdevices.h
+++ b/app/widgets/gimpdevices.h
@@ -19,27 +19,26 @@
#define __GIMP_DEVICES_H__
-void gimp_devices_init (Gimp *gimp);
-void gimp_devices_exit (Gimp *gimp);
+void gimp_devices_init (Gimp *gimp);
+void gimp_devices_exit (Gimp *gimp);
-void gimp_devices_restore (Gimp *gimp);
-void gimp_devices_save (Gimp *gimp,
- gboolean always_save);
+void gimp_devices_restore (Gimp *gimp);
+void gimp_devices_save (Gimp *gimp,
+ gboolean always_save);
-gboolean gimp_devices_clear (Gimp *gimp,
- GError **error);
+gboolean gimp_devices_clear (Gimp *gimp,
+ GError **error);
-GimpContainer * gimp_devices_get_list (Gimp *gimp);
-GimpDeviceInfo * gimp_devices_get_current (Gimp *gimp);
+GimpDeviceManager * gimp_devices_get_manager (Gimp *gimp);
-void gimp_devices_add_widget (Gimp *gimp,
- GtkWidget *widget);
+void gimp_devices_add_widget (Gimp *gimp,
+ GtkWidget *widget);
-gboolean gimp_devices_check_callback (GtkWidget *widget,
- GdkEvent *event,
- Gimp *gimp);
-gboolean gimp_devices_check_change (Gimp *gimp,
- GdkEvent *event);
+gboolean gimp_devices_check_callback (GtkWidget *widget,
+ GdkEvent *event,
+ Gimp *gimp);
+gboolean gimp_devices_check_change (Gimp *gimp,
+ GdkEvent *event);
#endif /* __GIMP_DEVICES_H__ */
diff --git a/app/widgets/gimpdevicestatus.c b/app/widgets/gimpdevicestatus.c
index d8a5222..d8121ad 100644
--- a/app/widgets/gimpdevicestatus.c
+++ b/app/widgets/gimpdevicestatus.c
@@ -39,6 +39,7 @@
#include "gimpdnd.h"
#include "gimpdeviceinfo.h"
+#include "gimpdevicemanager.h"
#include "gimpdevices.h"
#include "gimpdevicestatus.h"
#include "gimpdialogfactory.h"
@@ -88,6 +89,9 @@ static void gimp_device_status_device_remove (GimpContainer *devices,
GimpDeviceInfo *device_info,
GimpDeviceStatus *status);
+static void gimp_device_status_notify_device (GimpDeviceManager *manager,
+ const GParamSpec *pspec,
+ GimpDeviceStatus *status);
static void gimp_device_status_update_entry (GimpDeviceInfo *device_info,
GimpDeviceStatusEntry *entry);
static void gimp_device_status_save_clicked (GtkWidget *button,
@@ -149,7 +153,7 @@ gimp_device_status_constructed (GObject *object)
g_assert (GIMP_IS_GIMP (status->gimp));
- devices = gimp_devices_get_list (status->gimp);
+ devices = GIMP_CONTAINER (gimp_devices_get_manager (status->gimp));
for (list = GIMP_LIST (devices)->list; list; list = list->next)
gimp_device_status_device_add (devices, list->data, status);
@@ -161,7 +165,11 @@ gimp_device_status_constructed (GObject *object)
G_CALLBACK (gimp_device_status_device_remove),
status, 0);
- gimp_device_status_update (status);
+ g_signal_connect (devices, "notify::current-device",
+ G_CALLBACK (gimp_device_status_notify_device),
+ status);
+
+ gimp_device_status_notify_device (GIMP_DEVICE_MANAGER (devices), NULL, status);
}
static void
@@ -186,6 +194,10 @@ gimp_device_status_dispose (GObject *object)
g_list_free (status->devices);
status->devices = NULL;
+
+ g_signal_handlers_disconnect_by_func (gimp_devices_get_manager (status->gimp),
+ gimp_device_status_notify_device,
+ status);
}
G_OBJECT_CLASS (parent_class)->dispose (object);
@@ -204,6 +216,7 @@ gimp_device_status_set_property (GObject *object,
case PROP_GIMP:
status->gimp = g_value_get_object (value);
break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -389,14 +402,17 @@ gimp_device_status_new (Gimp *gimp)
NULL);
}
-void
-gimp_device_status_update (GimpDeviceStatus *status)
+
+/* private functions */
+
+static void
+gimp_device_status_notify_device (GimpDeviceManager *manager,
+ const GParamSpec *pspec,
+ GimpDeviceStatus *status)
{
GList *list;
- g_return_if_fail (GIMP_IS_DEVICE_STATUS (status));
-
- status->current_device = gimp_devices_get_current (status->gimp);
+ status->current_device = gimp_device_manager_get_current_device (manager);
for (list = status->devices; list; list = list->next)
{
@@ -407,9 +423,6 @@ gimp_device_status_update (GimpDeviceStatus *status)
}
}
-
-/* private functions */
-
static void
gimp_device_status_update_entry (GimpDeviceInfo *device_info,
GimpDeviceStatusEntry *entry)
diff --git a/app/widgets/gimpdevicestatus.h b/app/widgets/gimpdevicestatus.h
index 93060c4..8cebb7d 100644
--- a/app/widgets/gimpdevicestatus.h
+++ b/app/widgets/gimpdevicestatus.h
@@ -59,8 +59,7 @@ struct _GimpDeviceStatusClass
GType gimp_device_status_get_type (void) G_GNUC_CONST;
-GtkWidget * gimp_device_status_new (Gimp *gimp);
-void gimp_device_status_update (GimpDeviceStatus *status);
+GtkWidget * gimp_device_status_new (Gimp *gimp);
#endif /* __GIMP_DEVICE_STATUS_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]