diff --git a/ChangeLog b/ChangeLog index f5a9f1c269..1fe37e4c7d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2001-09-20 Michael Natterer + + * libgimpwidgets/gimpdialog.[ch]: made a real object (GtkDialog + subclass) out of it. The API will change soon too. + + * libgimpwidgets/gimpwidgetstypes.h: added GimpDialog typedef. + + * libgimpwidgets/gimpbutton.[ch] + * libgimpwidgets/gimpchainbutton.[ch] + * libgimpwidgets/gimpcolorarea.[ch] + * libgimpwidgets/gimpcolorbutton.[ch] + * libgimpwidgets/gimpfileselection.[ch] + * libgimpwidgets/gimpoffsetarea.[ch] + * libgimpwidgets/gimppatheditor.[ch] + * libgimpwidgets/gimppixmap.c + * libgimpwidgets/gimpsizeentry.c + * libgimpwidgets/gimpunitmenu.c: removed GtkType stuff and use + GType in all get_type() functions. Some random GObject porting. + + * app/gui/info-dialog.c + * app/gui/info-window.c + * app/tools/gimpcolorpickertool.c + * app/tools/gimpcroptool.c + * app/tools/gimpmeasuretool.c + * app/tools/gimptransformtool.c: changed accordingly. + 2001-09-20 Sven Neumann * app/gdisplay.c: fixed resize of cursor position label that I broke diff --git a/app/core/gimp-transform-region.c b/app/core/gimp-transform-region.c index b18611827e..077d315a18 100644 --- a/app/core/gimp-transform-region.c +++ b/app/core/gimp-transform-region.c @@ -496,7 +496,7 @@ gimp_transform_tool_button_press (GimpTool *tool, gimp_context_get_tool (gimp_get_user_context (gdisp->gimage->gimp))->tool_type; gimp_dialog_create_action_area - (GTK_DIALOG (transform_info->shell), + (GIMP_DIALOG (transform_info->shell), /* FIXME: this does not belong here */ (tool_type == GIMP_TYPE_ROTATE_TOOL) ? _("Rotate") : diff --git a/app/core/gimpdrawable-transform.c b/app/core/gimpdrawable-transform.c index b18611827e..077d315a18 100644 --- a/app/core/gimpdrawable-transform.c +++ b/app/core/gimpdrawable-transform.c @@ -496,7 +496,7 @@ gimp_transform_tool_button_press (GimpTool *tool, gimp_context_get_tool (gimp_get_user_context (gdisp->gimage->gimp))->tool_type; gimp_dialog_create_action_area - (GTK_DIALOG (transform_info->shell), + (GIMP_DIALOG (transform_info->shell), /* FIXME: this does not belong here */ (tool_type == GIMP_TYPE_ROTATE_TOOL) ? _("Rotate") : diff --git a/app/core/gimpimage-pick-color.c b/app/core/gimpimage-pick-color.c index c84c751481..79fe157dce 100644 --- a/app/core/gimpimage-pick-color.c +++ b/app/core/gimpimage-pick-color.c @@ -350,7 +350,7 @@ gimp_color_picker_tool_button_press (GimpTool *tool, /* create the action area */ gimp_dialog_create_action_area - (GTK_DIALOG (gimp_color_picker_tool_info->shell), + (GIMP_DIALOG (gimp_color_picker_tool_info->shell), GTK_STOCK_CLOSE, gimp_color_picker_tool_info_window_close_callback, gimp_color_picker_tool_info, NULL, NULL, TRUE, FALSE, diff --git a/app/dialogs/info-dialog.c b/app/dialogs/info-dialog.c index a61bd85101..f05a475c9e 100644 --- a/app/dialogs/info-dialog.c +++ b/app/dialogs/info-dialog.c @@ -173,7 +173,7 @@ info_dialog_new_extended (gchar *title, idialog->field_list = NULL; idialog->nfields = 0; - shell = gtk_dialog_new (); + shell = g_object_new (GIMP_TYPE_DIALOG, NULL); gtk_window_set_wmclass (GTK_WINDOW (shell), "info_dialog", "Gimp"); gtk_window_set_title (GTK_WINDOW (shell), title); diff --git a/app/dialogs/info-window.c b/app/dialogs/info-window.c index 48cac82b6e..284147f08c 100644 --- a/app/dialogs/info-window.c +++ b/app/dialogs/info-window.c @@ -331,7 +331,7 @@ info_window_create (GDisplay *gdisp) g_free (title); /* create the action area */ - gimp_dialog_create_action_area (GTK_DIALOG (info_win->shell), + gimp_dialog_create_action_area (GIMP_DIALOG (info_win->shell), GTK_STOCK_CLOSE, info_window_close_callback, info_win, NULL, NULL, TRUE, FALSE, diff --git a/app/gui/info-dialog.c b/app/gui/info-dialog.c index a61bd85101..f05a475c9e 100644 --- a/app/gui/info-dialog.c +++ b/app/gui/info-dialog.c @@ -173,7 +173,7 @@ info_dialog_new_extended (gchar *title, idialog->field_list = NULL; idialog->nfields = 0; - shell = gtk_dialog_new (); + shell = g_object_new (GIMP_TYPE_DIALOG, NULL); gtk_window_set_wmclass (GTK_WINDOW (shell), "info_dialog", "Gimp"); gtk_window_set_title (GTK_WINDOW (shell), title); diff --git a/app/gui/info-window.c b/app/gui/info-window.c index 48cac82b6e..284147f08c 100644 --- a/app/gui/info-window.c +++ b/app/gui/info-window.c @@ -331,7 +331,7 @@ info_window_create (GDisplay *gdisp) g_free (title); /* create the action area */ - gimp_dialog_create_action_area (GTK_DIALOG (info_win->shell), + gimp_dialog_create_action_area (GIMP_DIALOG (info_win->shell), GTK_STOCK_CLOSE, info_window_close_callback, info_win, NULL, NULL, TRUE, FALSE, diff --git a/app/tools/gimpcolorpickertool.c b/app/tools/gimpcolorpickertool.c index c84c751481..79fe157dce 100644 --- a/app/tools/gimpcolorpickertool.c +++ b/app/tools/gimpcolorpickertool.c @@ -350,7 +350,7 @@ gimp_color_picker_tool_button_press (GimpTool *tool, /* create the action area */ gimp_dialog_create_action_area - (GTK_DIALOG (gimp_color_picker_tool_info->shell), + (GIMP_DIALOG (gimp_color_picker_tool_info->shell), GTK_STOCK_CLOSE, gimp_color_picker_tool_info_window_close_callback, gimp_color_picker_tool_info, NULL, NULL, TRUE, FALSE, diff --git a/app/tools/gimpcroptool.c b/app/tools/gimpcroptool.c index 2228cce5f2..0d2b76c611 100644 --- a/app/tools/gimpcroptool.c +++ b/app/tools/gimpcroptool.c @@ -877,7 +877,7 @@ crop_info_create (GimpTool *tool) tool_manager_help_func, NULL); /* create the action area */ - gimp_dialog_create_action_area (GTK_DIALOG (crop_info->shell), + gimp_dialog_create_action_area (GIMP_DIALOG (crop_info->shell), _("Crop"), crop_crop_callback, NULL, NULL, NULL, TRUE, FALSE, diff --git a/app/tools/gimpmeasuretool.c b/app/tools/gimpmeasuretool.c index 26771daa9c..8d7c306d43 100644 --- a/app/tools/gimpmeasuretool.c +++ b/app/tools/gimpmeasuretool.c @@ -381,7 +381,7 @@ gimp_measure_tool_button_press (GimpTool *tool, info_dialog_add_label (measure_tool_info, _("Distance:"), distance_buf); info_dialog_add_label (measure_tool_info, _("Angle:"), angle_buf); - gimp_dialog_create_action_area (GTK_DIALOG (measure_tool_info->shell), + gimp_dialog_create_action_area (GIMP_DIALOG (measure_tool_info->shell), GTK_STOCK_CLOSE, measure_tool_info_window_close_callback, diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c index b18611827e..077d315a18 100644 --- a/app/tools/gimptransformtool.c +++ b/app/tools/gimptransformtool.c @@ -496,7 +496,7 @@ gimp_transform_tool_button_press (GimpTool *tool, gimp_context_get_tool (gimp_get_user_context (gdisp->gimage->gimp))->tool_type; gimp_dialog_create_action_area - (GTK_DIALOG (transform_info->shell), + (GIMP_DIALOG (transform_info->shell), /* FIXME: this does not belong here */ (tool_type == GIMP_TYPE_ROTATE_TOOL) ? _("Rotate") : diff --git a/libgimpwidgets/gimpbutton.c b/libgimpwidgets/gimpbutton.c index 256cf7d1b8..29fc076aa7 100644 --- a/libgimpwidgets/gimpbutton.c +++ b/libgimpwidgets/gimpbutton.c @@ -57,19 +57,22 @@ gimp_button_get_type (void) if (! button_type) { - GtkTypeInfo button_info = + static const GTypeInfo button_info = { - "GimpButton", - sizeof (GimpButton), - sizeof (GimpButtonClass), - (GtkClassInitFunc) gimp_button_class_init, - (GtkObjectInitFunc) gimp_button_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + sizeof (GimpButtonClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_button_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpButton), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_button_init, }; - button_type = gtk_type_unique (GTK_TYPE_BUTTON, &button_info); + button_type = g_type_register_static (GTK_TYPE_BUTTON, + "GimpButton", + &button_info, 0); } return button_type; @@ -81,8 +84,8 @@ gimp_button_class_init (GimpButtonClass *klass) GObjectClass *object_class; GtkWidgetClass *widget_class; - object_class = (GObjectClass *) klass; - widget_class = (GtkWidgetClass *) klass; + object_class = G_OBJECT_CLASS (klass); + widget_class = GTK_WIDGET_CLASS (klass); parent_class = g_type_class_peek_parent (klass); diff --git a/libgimpwidgets/gimpbutton.h b/libgimpwidgets/gimpbutton.h index 3c8a4a4511..a490dacbb0 100644 --- a/libgimpwidgets/gimpbutton.h +++ b/libgimpwidgets/gimpbutton.h @@ -23,6 +23,10 @@ #ifndef __GIMP_BUTTON_H__ #define __GIMP_BUTTON_H__ + +#include + + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -35,6 +39,7 @@ extern "C" { #define GIMP_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_BUTTON, GimpButtonClass)) #define GIMP_IS_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_BUTTON)) #define GIMP_IS_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_BUTTON)) +#define GIMP_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_BUTTON, GimpButtonClass)) typedef struct _GimpButtonClass GimpButtonClass; diff --git a/libgimpwidgets/gimpchainbutton.c b/libgimpwidgets/gimpchainbutton.c index ed28876a23..7043342bd9 100644 --- a/libgimpwidgets/gimpchainbutton.c +++ b/libgimpwidgets/gimpchainbutton.c @@ -83,19 +83,22 @@ gimp_chain_button_get_type (void) if (! gcb_type) { - GtkTypeInfo gcb_info = + static const GTypeInfo gcb_info = { - "GimpChainButton", - sizeof (GimpChainButton), - sizeof (GimpChainButtonClass), - (GtkClassInitFunc) gimp_chain_button_class_init, - (GtkObjectInitFunc) gimp_chain_button_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + sizeof (GimpChainButtonClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_chain_button_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpChainButton), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_chain_button_init, }; - gcb_type = gtk_type_unique (gtk_table_get_type (), &gcb_info); + gcb_type = g_type_register_static (GTK_TYPE_TABLE, + "GimpChainButton", + &gcb_info, 0); } return gcb_type; @@ -107,8 +110,8 @@ gimp_chain_button_class_init (GimpChainButtonClass *klass) GtkObjectClass *object_class; GtkWidgetClass *widget_class; - object_class = (GtkObjectClass *) klass; - widget_class = (GtkWidgetClass *) klass; + object_class = GTK_OBJECT_CLASS (klass); + widget_class = GTK_WIDGET_CLASS (klass); parent_class = g_type_class_peek_parent (klass); @@ -148,7 +151,7 @@ gimp_chain_button_init (GimpChainButton *gcb) gtk_pixmap_set_build_insensitive (GTK_PIXMAP (gcb->pixmap), TRUE); - g_signal_connect (G_OBJECT(gcb->button), "clicked", + g_signal_connect (G_OBJECT (gcb->button), "clicked", G_CALLBACK (gimp_chain_button_clicked_callback), gcb); g_signal_connect (G_OBJECT (gcb->line1), "expose_event", diff --git a/libgimpwidgets/gimpchainbutton.h b/libgimpwidgets/gimpchainbutton.h index 00eff176ab..f62791e353 100644 --- a/libgimpwidgets/gimpchainbutton.h +++ b/libgimpwidgets/gimpchainbutton.h @@ -41,6 +41,7 @@ extern "C" { #define GIMP_CHAIN_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_CHAIN_BUTTON, GimpChainButtonClass)) #define GIMP_IS_CHAIN_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CHAIN_BUTTON)) #define GIMP_IS_CHAIN_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_CHAIN_BUTTON)) +#define GIMP_CHAIN_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_CHAIN_BUTTON, GimpChainButtonClass)) typedef struct _GimpChainButtonClass GimpChainButtonClass; @@ -56,7 +57,7 @@ typedef enum struct _GimpChainButton { - GtkTable table; + GtkTable parent_instance; GimpChainPosition position; GtkWidget *button; @@ -72,14 +73,16 @@ struct _GimpChainButton struct _GimpChainButtonClass { - GtkTableClass parent_class; + GtkTableClass parent_class; void (* toggled) (GimpChainButton *gcb); }; -GtkType gimp_chain_button_get_type (void); +GType gimp_chain_button_get_type (void); + GtkWidget * gimp_chain_button_new (GimpChainPosition position); + void gimp_chain_button_set_active (GimpChainButton *gcb, gboolean is_active); gboolean gimp_chain_button_get_active (GimpChainButton *gcb); diff --git a/libgimpwidgets/gimpcolorarea.c b/libgimpwidgets/gimpcolorarea.c index 7c1be9baca..96d8945660 100644 --- a/libgimpwidgets/gimpcolorarea.c +++ b/libgimpwidgets/gimpcolorarea.c @@ -36,16 +36,18 @@ #define DRAG_ICON_OFFSET -8 -static const GtkTargetEntry targets[] = { { "application/x-color", 0 } }; - enum { COLOR_CHANGED, LAST_SIGNAL }; -static guint gimp_color_area_signals[LAST_SIGNAL] = { 0 }; -static GtkWidgetClass *parent_class = NULL; + +static const GtkTargetEntry targets[] = { { "application/x-color", 0 } }; + +static guint gimp_color_area_signals[LAST_SIGNAL] = { 0 }; + +static GtkWidgetClass * parent_class = NULL; static void gimp_color_area_class_init (GimpColorAreaClass *klass); @@ -84,19 +86,22 @@ gimp_color_area_get_type (void) if (!gca_type) { - GtkTypeInfo gca_info = + static const GTypeInfo gca_info = { - "GimpColorArea", - sizeof (GimpColorArea), - sizeof (GimpColorAreaClass), - (GtkClassInitFunc) gimp_color_area_class_init, - (GtkObjectInitFunc) gimp_color_area_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + sizeof (GimpColorAreaClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_color_area_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpColorArea), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_color_area_init, }; - gca_type = gtk_type_unique (GTK_TYPE_PREVIEW, &gca_info); + gca_type = g_type_register_static (GTK_TYPE_PREVIEW, + "GimpColorArea", + &gca_info, 0); } return gca_type; diff --git a/libgimpwidgets/gimpcolorarea.h b/libgimpwidgets/gimpcolorarea.h index 5f20807c53..5da6370130 100644 --- a/libgimpwidgets/gimpcolorarea.h +++ b/libgimpwidgets/gimpcolorarea.h @@ -42,20 +42,14 @@ extern "C" { #define GIMP_COLOR_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_AREA, GimpColorAreaClass)) #define GIMP_IS_COLOR_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_AREA)) #define GIMP_IS_COLOR_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_AREA)) +#define GIMP_COLOR_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_AREA, GimpColorAreaClass)) -typedef enum -{ - GIMP_COLOR_AREA_FLAT = 0, - GIMP_COLOR_AREA_SMALL_CHECKS, - GIMP_COLOR_AREA_LARGE_CHECKS -} GimpColorAreaType; - typedef struct _GimpColorAreaClass GimpColorAreaClass; struct _GimpColorArea { - GtkPreview preview; + GtkPreview parent_instance; /*< private >*/ GimpColorAreaType type; @@ -65,16 +59,18 @@ struct _GimpColorArea struct _GimpColorAreaClass { - GtkPreviewClass parent_class; + GtkPreviewClass parent_class; void (* color_changed) (GimpColorArea *gca); }; -GtkType gimp_color_area_get_type (void); +GType gimp_color_area_get_type (void); + GtkWidget * gimp_color_area_new (const GimpRGB *color, GimpColorAreaType type, GdkModifierType drag_mask); + void gimp_color_area_set_color (GimpColorArea *gca, const GimpRGB *color); void gimp_color_area_get_color (GimpColorArea *gca, diff --git a/libgimpwidgets/gimpcolorbutton.c b/libgimpwidgets/gimpcolorbutton.c index c6037689db..e086ede636 100644 --- a/libgimpwidgets/gimpcolorbutton.c +++ b/libgimpwidgets/gimpcolorbutton.c @@ -36,6 +36,13 @@ #include "libgimp/libgimp-intl.h" +enum +{ + COLOR_CHANGED, + LAST_SIGNAL +}; + + static void gimp_color_button_class_init (GimpColorButtonClass *klass); static void gimp_color_button_init (GimpColorButton *gcb); static void gimp_color_button_destroy (GtkObject *object); @@ -71,19 +78,99 @@ static GtkItemFactoryEntry menu_items[] = { N_("/Use Foreground Color"), NULL, gimp_color_button_use_fg, 2, NULL }, { N_("/Use Background Color"), NULL, gimp_color_button_use_bg, 2, NULL } }; -static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); + +static guint gimp_color_button_signals[LAST_SIGNAL] = { 0 }; + +static GimpButtonClass * parent_class = NULL; -enum +GType +gimp_color_button_get_type (void) { - COLOR_CHANGED, - LAST_SIGNAL -}; + static GType gcb_type = 0; -static guint gimp_color_button_signals[LAST_SIGNAL] = { 0 }; + if (!gcb_type) + { + static const GTypeInfo gcb_info = + { + sizeof (GimpColorButtonClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_color_button_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpColorButton), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_color_button_init, + }; -static GtkPreviewClass *parent_class = NULL; + gcb_type = g_type_register_static (GIMP_TYPE_BUTTON, + "GimpColorButton", + &gcb_info, 0); + } + + return gcb_type; +} +static void +gimp_color_button_class_init (GimpColorButtonClass *klass) +{ + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; + GtkButtonClass *button_class; + + object_class = GTK_OBJECT_CLASS (klass); + widget_class = GTK_WIDGET_CLASS (klass); + button_class = GTK_BUTTON_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + gimp_color_button_signals[COLOR_CHANGED] = + g_signal_new ("color_changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GimpColorButtonClass, color_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + klass->color_changed = NULL; + + object_class->destroy = gimp_color_button_destroy; + + widget_class->state_changed = gimp_color_button_state_changed; + + button_class->clicked = gimp_color_button_clicked; +} + +static void +gimp_color_button_init (GimpColorButton *gcb) +{ + GimpRGB color; + + gcb->title = NULL; + gcb->dialog = NULL; + + gimp_rgba_set (&color, 0.0, 0.0, 0.0, 1.0); + gcb->color_area = gimp_color_area_new (&color, FALSE, GDK_BUTTON2_MASK); + g_signal_connect (G_OBJECT (gcb->color_area), "color_changed", + G_CALLBACK (gimp_color_button_color_changed), + gcb); + + gtk_container_add (GTK_CONTAINER (gcb), gcb->color_area); + gtk_widget_show (gcb->color_area); + + /* right-click opens a popup */ + gcb->item_factory = gtk_item_factory_new (GTK_TYPE_MENU, "", NULL); + gtk_item_factory_set_translate_func (gcb->item_factory, + gimp_color_button_menu_translate, + NULL, NULL); + gtk_item_factory_create_items (gcb->item_factory, + G_N_ELEMENTS (menu_items), menu_items, gcb); + g_signal_connect (G_OBJECT (gcb), "button_press_event", + G_CALLBACK (gimp_color_button_menu_popup), + gcb); +} static void gimp_color_button_destroy (GtkObject *object) @@ -114,90 +201,17 @@ gimp_color_button_destroy (GtkObject *object) GTK_OBJECT_CLASS (parent_class)->destroy (object); } - static void -gimp_color_button_class_init (GimpColorButtonClass *klass) -{ - GtkObjectClass *object_class; - GtkWidgetClass *widget_class; - GtkButtonClass *button_class; +gimp_color_button_state_changed (GtkWidget *widget, + GtkStateType previous_state) +{ + g_return_if_fail (GIMP_IS_COLOR_BUTTON (widget)); - object_class = (GtkObjectClass *) klass; - widget_class = (GtkWidgetClass *) klass; - button_class = (GtkButtonClass *) klass; - - parent_class = g_type_class_peek_parent (klass); + if (!GTK_WIDGET_IS_SENSITIVE (widget) && GIMP_COLOR_BUTTON (widget)->dialog) + gtk_widget_hide (GIMP_COLOR_BUTTON (widget)->dialog); - gimp_color_button_signals[COLOR_CHANGED] = - g_signal_new ("color_changed", - G_TYPE_FROM_CLASS (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GimpColorButtonClass, color_changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - klass->color_changed = NULL; - - object_class->destroy = gimp_color_button_destroy; - - widget_class->state_changed = gimp_color_button_state_changed; - - button_class->clicked = gimp_color_button_clicked; -} - -static void -gimp_color_button_init (GimpColorButton *gcb) -{ - GimpRGB color; - - gcb->title = NULL; - gcb->dialog = NULL; - - gimp_rgba_set (&color, 0.0, 0.0, 0.0, 1.0); - gcb->color_area = gimp_color_area_new (&color, FALSE, GDK_BUTTON2_MASK); - g_signal_connect (G_OBJECT (gcb->color_area), "color_changed", - G_CALLBACK (gimp_color_button_color_changed), - gcb); - - gtk_container_add (GTK_CONTAINER (gcb), gcb->color_area); - gtk_widget_show (gcb->color_area); - - /* right-click opens a popup */ - gcb->item_factory = gtk_item_factory_new (GTK_TYPE_MENU, "", NULL); - gtk_item_factory_set_translate_func (gcb->item_factory, - gimp_color_button_menu_translate, - NULL, NULL); - gtk_item_factory_create_items (gcb->item_factory, - nmenu_items, menu_items, gcb); - g_signal_connect (G_OBJECT (gcb), "button_press_event", - G_CALLBACK (gimp_color_button_menu_popup), - gcb); -} - -GtkType -gimp_color_button_get_type (void) -{ - static GtkType gcb_type = 0; - - if (!gcb_type) - { - GtkTypeInfo gcb_info = - { - "GimpColorButton", - sizeof (GimpColorButton), - sizeof (GimpColorButtonClass), - (GtkClassInitFunc) gimp_color_button_class_init, - (GtkObjectInitFunc) gimp_color_button_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL - }; - - gcb_type = gtk_type_unique (gtk_button_get_type (), &gcb_info); - } - - return gcb_type; + if (GTK_WIDGET_CLASS (parent_class)->state_changed) + GTK_WIDGET_CLASS (parent_class)->state_changed (widget, previous_state); } /** @@ -301,20 +315,6 @@ gimp_color_button_set_type (GimpColorButton *gcb, gimp_color_area_set_type (GIMP_COLOR_AREA (gcb->color_area), type); } -static void -gimp_color_button_state_changed (GtkWidget *widget, - GtkStateType previous_state) -{ - g_return_if_fail (widget != NULL); - g_return_if_fail (GIMP_IS_COLOR_BUTTON (widget)); - - if (!GTK_WIDGET_IS_SENSITIVE (widget) && GIMP_COLOR_BUTTON (widget)->dialog) - gtk_widget_hide (GIMP_COLOR_BUTTON (widget)->dialog); - - if (GTK_WIDGET_CLASS (parent_class)->state_changed) - GTK_WIDGET_CLASS (parent_class)->state_changed (widget, previous_state); -} - static gint gimp_color_button_menu_popup (GtkWidget *widget, GdkEvent *event, @@ -325,7 +325,6 @@ gimp_color_button_menu_popup (GtkWidget *widget, gint x; gint y; - g_return_val_if_fail (data != NULL, FALSE); g_return_val_if_fail (GIMP_IS_COLOR_BUTTON (data), FALSE); gcb = GIMP_COLOR_BUTTON (data); @@ -353,7 +352,6 @@ gimp_color_button_clicked (GtkButton *button) GimpRGB color; gdouble dcolor[4]; - g_return_if_fail (button != NULL); g_return_if_fail (GIMP_IS_COLOR_BUTTON (button)); gcb = GIMP_COLOR_BUTTON (button); @@ -402,7 +400,6 @@ gimp_color_button_dialog_ok (GtkWidget *widget, GimpRGB color; gdouble dcolor[4]; - g_return_if_fail (data != NULL); g_return_if_fail (GIMP_IS_COLOR_BUTTON (data)); gcb = GIMP_COLOR_BUTTON (data); @@ -419,7 +416,6 @@ static void gimp_color_button_dialog_cancel (GtkWidget *widget, gpointer data) { - g_return_if_fail (data != NULL); g_return_if_fail (GIMP_IS_COLOR_BUTTON (data)); gtk_widget_hide (GIMP_COLOR_BUTTON (data)->dialog); @@ -433,7 +429,6 @@ gimp_color_button_use_fg (gpointer callback_data, { GimpRGB color; - g_return_if_fail (callback_data != NULL); g_return_if_fail (GIMP_IS_COLOR_BUTTON (callback_data)); gimp_color_button_get_color (GIMP_COLOR_BUTTON (callback_data), &color); @@ -448,7 +443,6 @@ gimp_color_button_use_bg (gpointer callback_data, { GimpRGB color; - g_return_if_fail (callback_data != NULL); g_return_if_fail (GIMP_IS_COLOR_BUTTON (callback_data)); gimp_color_button_get_color (GIMP_COLOR_BUTTON (callback_data), &color); diff --git a/libgimpwidgets/gimpcolorbutton.h b/libgimpwidgets/gimpcolorbutton.h index 13d7966a21..65e5d3273f 100644 --- a/libgimpwidgets/gimpcolorbutton.h +++ b/libgimpwidgets/gimpcolorbutton.h @@ -30,7 +30,7 @@ #define __GIMP_COLOR_BUTTON_H__ -#include "libgimpwidgets/gimpcolorarea.h" +#include #ifdef __cplusplus @@ -43,13 +43,14 @@ extern "C" { #define GIMP_COLOR_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_BUTTON, GimpColorButtonClass)) #define GIMP_IS_COLOR_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_BUTTON)) #define GIMP_IS_COLOR_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_BUTTON)) +#define GIMP_COLOR_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_BUTTON, GimpColorButtonClass)) typedef struct _GimpColorButtonClass GimpColorButtonClass; struct _GimpColorButton { - GtkButton button; + GimpButton parent_instance; gchar *title; @@ -60,18 +61,20 @@ struct _GimpColorButton struct _GimpColorButtonClass { - GtkButtonClass parent_class; + GimpButtonClass parent_class; void (* color_changed) (GimpColorButton *gcb); }; -GtkType gimp_color_button_get_type (void); +GType gimp_color_button_get_type (void); + GtkWidget * gimp_color_button_new (const gchar *title, gint width, gint height, const GimpRGB *color, GimpColorAreaType type); + void gimp_color_button_set_color (GimpColorButton *gcb, const GimpRGB *color); void gimp_color_button_get_color (GimpColorButton *gcb, diff --git a/libgimpwidgets/gimpdialog.c b/libgimpwidgets/gimpdialog.c index cb2ebcf62e..4ed61feacf 100644 --- a/libgimpwidgets/gimpdialog.c +++ b/libgimpwidgets/gimpdialog.c @@ -38,33 +38,77 @@ typedef void (* GimpDialogCancelCallback) (GtkWidget *widget, gpointer data); -/* local callbacks of gimp_dialog_new () */ -static gboolean -gimp_dialog_delete_callback (GtkWidget *widget, - GdkEvent *event, - gpointer data) +static void gimp_dialog_class_init (GimpDialogClass *klass); +static void gimp_dialog_init (GimpDialog *dialog); + +static void gimp_dialog_realize (GtkWidget *widget); +static void gimp_dialog_real_realize (GtkWidget *widget); +static gboolean gimp_dialog_delete_event (GtkWidget *widget, + GdkEventAny *event); + + +static GtkDialogClass *parent_class = NULL; + + +GType +gimp_dialog_get_type (void) { - GimpDialogCancelCallback cancel_callback; - GtkWidget *cancel_widget; + static GType dialog_type = 0; - cancel_callback = (GimpDialogCancelCallback) - g_object_get_data (G_OBJECT (widget), "gimp_dialog_cancel_callback"); - - cancel_widget = (GtkWidget *) - g_object_get_data (G_OBJECT (widget), "gimp_dialog_cancel_widget"); - - /* the cancel callback has to destroy the dialog */ - if (cancel_callback) + if (! dialog_type) { - cancel_callback (cancel_widget, data); + static const GTypeInfo dialog_info = + { + sizeof (GimpDialogClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_dialog_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpDialog), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_dialog_init, + }; + + dialog_type = g_type_register_static (GTK_TYPE_DIALOG, + "GimpDialog", + &dialog_info, 0); } - return TRUE; + return dialog_type; } static void -gimp_dialog_realize_callback (GtkWidget *widget, - gpointer data) +gimp_dialog_class_init (GimpDialogClass *klass) +{ + GObjectClass *object_class; + GtkWidgetClass *widget_class; + + object_class = G_OBJECT_CLASS (klass); + widget_class = GTK_WIDGET_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + + widget_class->realize = gimp_dialog_realize; + widget_class->delete_event = gimp_dialog_delete_event; +} + +static void +gimp_dialog_init (GimpDialog *dialog) +{ +} + +static void +gimp_dialog_realize (GtkWidget *widget) +{ + if (GTK_WIDGET_CLASS (parent_class)->realize) + GTK_WIDGET_CLASS (parent_class)->realize (widget); + + gimp_dialog_real_realize (widget); +} + +static void +gimp_dialog_real_realize (GtkWidget *widget) { static GdkPixmap *wilber_pixmap = NULL; static GdkBitmap *wilber_mask = NULL; @@ -83,6 +127,32 @@ gimp_dialog_realize_callback (GtkWidget *widget, wilber_pixmap, wilber_mask); } +static gboolean +gimp_dialog_delete_event (GtkWidget *widget, + GdkEventAny *event) +{ + GimpDialogCancelCallback cancel_callback; + GtkWidget *cancel_widget; + gpointer cancel_data; + + cancel_callback = (GimpDialogCancelCallback) + g_object_get_data (G_OBJECT (widget), "gimp_dialog_cancel_callback"); + + cancel_widget = (GtkWidget *) + g_object_get_data (G_OBJECT (widget), "gimp_dialog_cancel_widget"); + + cancel_data = + g_object_get_data (G_OBJECT (widget), "gimp_dialog_cancel_data"); + + /* the cancel callback has to destroy the dialog */ + if (cancel_callback) + { + cancel_callback (cancel_widget, cancel_data); + } + + return TRUE; +} + /** * gimp_dialog_new: * @title: The dialog's title which will be set with @@ -107,7 +177,7 @@ gimp_dialog_realize_callback (GtkWidget *widget, * For a description of the format of the @va_list describing the * action_area buttons see gimp_dialog_create_action_areav(). * - * Returns: A #GtkDialog. + * Returns: A #GimpDialog. **/ GtkWidget * gimp_dialog_new (const gchar *title, @@ -175,7 +245,7 @@ gimp_dialog_new (const gchar *title, * The @va_list describing the action_area buttons will be passed to * gimp_dialog_create_action_areav(). * - * Returns: A #GtkDialog. + * Returns: A #GimpDialog. **/ GtkWidget * gimp_dialog_newv (const gchar *title, @@ -193,7 +263,8 @@ gimp_dialog_newv (const gchar *title, g_return_val_if_fail (title != NULL, NULL); g_return_val_if_fail (wmclass_name != NULL, NULL); - dialog = gtk_dialog_new (); + dialog = g_object_new (GIMP_TYPE_DIALOG, NULL); + gtk_window_set_title (GTK_WINDOW (dialog), title); gtk_window_set_wmclass (GTK_WINDOW (dialog), wmclass_name, "Gimp"); gtk_window_set_position (GTK_WINDOW (dialog), position); @@ -201,7 +272,7 @@ gimp_dialog_newv (const gchar *title, allow_shrink, allow_grow, auto_shrink); /* prepare the action_area */ - gimp_dialog_create_action_areav (GTK_DIALOG (dialog), args); + gimp_dialog_create_action_areav (GIMP_DIALOG (dialog), args); /* connect the "F1" help key */ if (help_func) @@ -210,35 +281,9 @@ gimp_dialog_newv (const gchar *title, return dialog; } -/** - * gimp_dialog_set_icon: - * @dialog: The #GtkWindow you want to set the pixmap icon for. - * - * This function sets the WM pixmap icon for the dialog which will appear - * e.g. in GNOME's or KDE's window list. - * - * Note that this function is automatically called by - * gimp_help_connect() which in turn is called by gimp_dialog_newv(), - * so you only have to call it for #GtkWindow's which have no help - * page (like tear-off menus). - **/ -void -gimp_dialog_set_icon (GtkWindow *dialog) -{ - g_return_if_fail (dialog); - g_return_if_fail (GTK_IS_WINDOW (dialog)); - - if (GTK_WIDGET_REALIZED (GTK_WIDGET (dialog))) - gimp_dialog_realize_callback (GTK_WIDGET (dialog), NULL); - else - g_signal_connect (G_OBJECT (dialog), "realize", - G_CALLBACK (gimp_dialog_realize_callback), - NULL); -} - /** * gimp_dialog_create_action_area: - * @dialog: The #GtkDialog you want to create the action_area for. + * @dialog: The #GimpDialog you want to create the action_area for. * @...: A #NULL terminated @va_list destribing the action_area buttons. * * This function simply packs the action_area arguments passed in "..." @@ -246,7 +291,7 @@ gimp_dialog_set_icon (GtkWindow *dialog) * gimp_dialog_create_action_areav(). **/ void -gimp_dialog_create_action_area (GtkDialog *dialog, +gimp_dialog_create_action_area (GimpDialog *dialog, /* specify action area buttons as va_list: * const gchar *label, @@ -271,7 +316,7 @@ gimp_dialog_create_action_area (GtkDialog *dialog, /** * gimp_dialog_create_action_areav: - * @dialog: The #GtkDialog you want to create the action_area for. + * @dialog: The #GimpDialog you want to create the action_area for. * @args: A @va_list as obtained with va_start() describing the action_area * buttons. * @@ -282,8 +327,8 @@ gimp_dialog_create_action_area (GtkDialog *dialog, * and callback != NULL. **/ void -gimp_dialog_create_action_areav (GtkDialog *dialog, - va_list args) +gimp_dialog_create_action_areav (GimpDialog *dialog, + va_list args) { GtkWidget *button; @@ -298,8 +343,7 @@ gimp_dialog_create_action_areav (GtkDialog *dialog, gboolean delete_connected = FALSE; - g_return_if_fail (dialog != NULL); - g_return_if_fail (GTK_IS_DIALOG (dialog)); + g_return_if_fail (GIMP_IS_DIALOG (dialog)); label = va_arg (args, const gchar *); @@ -336,11 +380,8 @@ gimp_dialog_create_action_areav (GtkDialog *dialog, callback); g_object_set_data (G_OBJECT (dialog), "gimp_dialog_cancel_widget", slot_object ? slot_object : G_OBJECT (dialog)); - - /* catch the WM delete event */ - g_signal_connect (G_OBJECT (dialog), "delete_event", - G_CALLBACK (gimp_dialog_delete_callback), - callback_data); + g_object_set_data (G_OBJECT (dialog), "gimp_dialog_cancel_data", + callback_data); delete_connected = TRUE; } @@ -348,7 +389,8 @@ gimp_dialog_create_action_areav (GtkDialog *dialog, /* otherwise just create the requested button. */ else { - button = gtk_dialog_add_button (dialog, label, GTK_RESPONSE_NONE); + button = gtk_dialog_add_button (GTK_DIALOG (dialog), + label, GTK_RESPONSE_NONE); if (callback) { @@ -367,17 +409,12 @@ gimp_dialog_create_action_areav (GtkDialog *dialog, if (connect_delete && callback && ! delete_connected) { - g_object_set_data (G_OBJECT (dialog), - "gimp_dialog_cancel_callback", + g_object_set_data (G_OBJECT (dialog), "gimp_dialog_cancel_callback", callback); - g_object_set_data (G_OBJECT (dialog), - "gimp_dialog_cancel_widget", + g_object_set_data (G_OBJECT (dialog), "gimp_dialog_cancel_widget", slot_object ? slot_object : G_OBJECT (button)); - - /* catch the WM delete event */ - g_signal_connect (G_OBJECT (dialog), "delete_event", - G_CALLBACK (gimp_dialog_delete_callback), - callback_data); + g_object_set_data (G_OBJECT (dialog), "gimp_dialog_cancel_data", + callback_data); delete_connected = TRUE; } @@ -389,3 +426,28 @@ gimp_dialog_create_action_areav (GtkDialog *dialog, label = va_arg (args, gchar *); } } + +/** + * gimp_dialog_set_icon: + * @dialog: The #GtkWindow you want to set the pixmap icon for. + * + * This function sets the WM pixmap icon for the dialog which will appear + * e.g. in GNOME's or KDE's window list. + * + * Note that this function is automatically called by + * gimp_help_connect() which in turn is called by gimp_dialog_newv(), + * so you only have to call it for #GtkWindow's which have no help + * page (like tear-off menus). + **/ +void +gimp_dialog_set_icon (GtkWindow *dialog) +{ + g_return_if_fail (GTK_IS_WINDOW (dialog)); + + if (GTK_WIDGET_REALIZED (GTK_WIDGET (dialog))) + gimp_dialog_real_realize (GTK_WIDGET (dialog)); + else + g_signal_connect (G_OBJECT (dialog), "realize", + G_CALLBACK (gimp_dialog_real_realize), + NULL); +} diff --git a/libgimpwidgets/gimpdialog.h b/libgimpwidgets/gimpdialog.h index a28ab520b7..8e0efde6eb 100644 --- a/libgimpwidgets/gimpdialog.h +++ b/libgimpwidgets/gimpdialog.h @@ -23,6 +23,10 @@ #ifndef __GIMP_DIALOG_H__ #define __GIMP_DIALOG_H__ + +#include + + #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ @@ -30,6 +34,29 @@ extern "C" { /* For information look into the C source or the html documentation */ +#define GIMP_TYPE_DIALOG (gimp_dialog_get_type ()) +#define GIMP_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_DIALOG, GimpDialog)) +#define GIMP_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_DIALOG, GimpDialogClass)) +#define GIMP_IS_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_DIALOG)) +#define GIMP_IS_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_DIALOG)) +#define GIMP_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_DIALOG, GimpDialogClass)) + + +typedef struct _GimpDialogClass GimpDialogClass; + +struct _GimpDialog +{ + GtkDialog parent_instance; +}; + +struct _GimpDialogClass +{ + GtkDialogClass parent_class; +}; + + +GType gimp_dialog_get_type (void); + GtkWidget * gimp_dialog_new (const gchar *title, const gchar *wmclass_name, GimpHelpFunc help_func, @@ -62,9 +89,7 @@ GtkWidget * gimp_dialog_newv (const gchar *title, gint auto_shrink, va_list args); -void gimp_dialog_set_icon (GtkWindow *dialog); - -void gimp_dialog_create_action_area (GtkDialog *dialog, +void gimp_dialog_create_action_area (GimpDialog *dialog, /* specify action area buttons * as va_list: @@ -79,9 +104,11 @@ void gimp_dialog_create_action_area (GtkDialog *dialog, ...); -void gimp_dialog_create_action_areav (GtkDialog *dialog, +void gimp_dialog_create_action_areav (GimpDialog *dialog, va_list args); +void gimp_dialog_set_icon (GtkWindow *dialog); + #ifdef __cplusplus } diff --git a/libgimpwidgets/gimpfileentry.c b/libgimpwidgets/gimpfileentry.c index 360e3d6964..c6eb4c1589 100644 --- a/libgimpwidgets/gimpfileentry.c +++ b/libgimpwidgets/gimpfileentry.c @@ -50,28 +50,28 @@ #endif -static void gimp_file_selection_class_init (GimpFileSelectionClass *klass); -static void gimp_file_selection_init (GimpFileSelection *gfs); - -static void gimp_file_selection_destroy (GtkObject *object); - -static void gimp_file_selection_entry_callback (GtkWidget *widget, - gpointer data); -static gint gimp_file_selection_entry_focus_out_callback (GtkWidget *widget, - GdkEvent *event, - gpointer data); -static void gimp_file_selection_browse_callback (GtkWidget *widget, - gpointer data); - -/* private functions */ -static void gimp_file_selection_check_filename (GimpFileSelection *gfs); - enum { FILENAME_CHANGED, LAST_SIGNAL }; + +static void gimp_file_selection_class_init (GimpFileSelectionClass *klass); +static void gimp_file_selection_init (GimpFileSelection *gfs); + +static void gimp_file_selection_destroy (GtkObject *object); + +static void gimp_file_selection_entry_callback (GtkWidget *widget, + gpointer data); +static gint gimp_file_selection_entry_focus_out_callback (GtkWidget *widget, + GdkEvent *event, + gpointer data); +static void gimp_file_selection_browse_callback (GtkWidget *widget, + gpointer data); +static void gimp_file_selection_check_filename (GimpFileSelection *gfs); + + static guint gimp_file_selection_signals[LAST_SIGNAL] = { 0 }; static GtkHBoxClass *parent_class = NULL; @@ -82,7 +82,7 @@ gimp_file_selection_get_type (void) { static GType gfs_type = 0; - if (!gfs_type) + if (! gfs_type) { static const GTypeInfo gfs_info = { @@ -97,10 +97,11 @@ gimp_file_selection_get_type (void) (GInstanceInitFunc) gimp_file_selection_init, }; - gfs_type = g_type_register_static (GTK_TYPE_HBOX, "GimpFileSelection", + gfs_type = g_type_register_static (GTK_TYPE_HBOX, + "GimpFileSelection", &gfs_info, 0); } - + return gfs_type; } diff --git a/libgimpwidgets/gimpfileentry.h b/libgimpwidgets/gimpfileentry.h index 5ca6ad4bcf..5b46ea403c 100644 --- a/libgimpwidgets/gimpfileentry.h +++ b/libgimpwidgets/gimpfileentry.h @@ -35,13 +35,14 @@ extern "C" { #define GIMP_FILE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_FILE_SELECTION, GimpFileSelectionClass)) #define GIMP_IS_FILE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_FILE_SELECTION)) #define GIMP_IS_FILE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_FILE_SELECTION)) +#define GIMP_FILE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_FILE_SELECTION, GimpFileSelectionClass)) typedef struct _GimpFileSelectionClass GimpFileSelectionClass; struct _GimpFileSelection { - GtkHBox hbox; + GtkHBox parent_instance; GtkWidget *file_exists; GtkWidget *entry; @@ -56,7 +57,7 @@ struct _GimpFileSelection struct _GimpFileSelectionClass { - GtkHBoxClass parent_class; + GtkHBoxClass parent_class; void (* filename_changed) (GimpFileSelection *gfs); }; diff --git a/libgimpwidgets/gimpfileselection.c b/libgimpwidgets/gimpfileselection.c index 360e3d6964..c6eb4c1589 100644 --- a/libgimpwidgets/gimpfileselection.c +++ b/libgimpwidgets/gimpfileselection.c @@ -50,28 +50,28 @@ #endif -static void gimp_file_selection_class_init (GimpFileSelectionClass *klass); -static void gimp_file_selection_init (GimpFileSelection *gfs); - -static void gimp_file_selection_destroy (GtkObject *object); - -static void gimp_file_selection_entry_callback (GtkWidget *widget, - gpointer data); -static gint gimp_file_selection_entry_focus_out_callback (GtkWidget *widget, - GdkEvent *event, - gpointer data); -static void gimp_file_selection_browse_callback (GtkWidget *widget, - gpointer data); - -/* private functions */ -static void gimp_file_selection_check_filename (GimpFileSelection *gfs); - enum { FILENAME_CHANGED, LAST_SIGNAL }; + +static void gimp_file_selection_class_init (GimpFileSelectionClass *klass); +static void gimp_file_selection_init (GimpFileSelection *gfs); + +static void gimp_file_selection_destroy (GtkObject *object); + +static void gimp_file_selection_entry_callback (GtkWidget *widget, + gpointer data); +static gint gimp_file_selection_entry_focus_out_callback (GtkWidget *widget, + GdkEvent *event, + gpointer data); +static void gimp_file_selection_browse_callback (GtkWidget *widget, + gpointer data); +static void gimp_file_selection_check_filename (GimpFileSelection *gfs); + + static guint gimp_file_selection_signals[LAST_SIGNAL] = { 0 }; static GtkHBoxClass *parent_class = NULL; @@ -82,7 +82,7 @@ gimp_file_selection_get_type (void) { static GType gfs_type = 0; - if (!gfs_type) + if (! gfs_type) { static const GTypeInfo gfs_info = { @@ -97,10 +97,11 @@ gimp_file_selection_get_type (void) (GInstanceInitFunc) gimp_file_selection_init, }; - gfs_type = g_type_register_static (GTK_TYPE_HBOX, "GimpFileSelection", + gfs_type = g_type_register_static (GTK_TYPE_HBOX, + "GimpFileSelection", &gfs_info, 0); } - + return gfs_type; } diff --git a/libgimpwidgets/gimpfileselection.h b/libgimpwidgets/gimpfileselection.h index 5ca6ad4bcf..5b46ea403c 100644 --- a/libgimpwidgets/gimpfileselection.h +++ b/libgimpwidgets/gimpfileselection.h @@ -35,13 +35,14 @@ extern "C" { #define GIMP_FILE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_FILE_SELECTION, GimpFileSelectionClass)) #define GIMP_IS_FILE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_FILE_SELECTION)) #define GIMP_IS_FILE_SELECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_FILE_SELECTION)) +#define GIMP_FILE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_FILE_SELECTION, GimpFileSelectionClass)) typedef struct _GimpFileSelectionClass GimpFileSelectionClass; struct _GimpFileSelection { - GtkHBox hbox; + GtkHBox parent_instance; GtkWidget *file_exists; GtkWidget *entry; @@ -56,7 +57,7 @@ struct _GimpFileSelection struct _GimpFileSelectionClass { - GtkHBoxClass parent_class; + GtkHBoxClass parent_class; void (* filename_changed) (GimpFileSelection *gfs); }; diff --git a/libgimpwidgets/gimpoffsetarea.c b/libgimpwidgets/gimpoffsetarea.c index b92778e479..b3fd731a33 100644 --- a/libgimpwidgets/gimpoffsetarea.c +++ b/libgimpwidgets/gimpoffsetarea.c @@ -39,11 +39,13 @@ enum }; -static void gimp_offset_area_destroy (GtkObject *object); -static void gimp_offset_area_resize (GimpOffsetArea *offset_area); -static gboolean gimp_offset_area_event (GtkWidget *widget, - GdkEvent *event); -static void gimp_offset_area_draw (GimpOffsetArea *offset_area); +static void gimp_offset_area_class_init (GimpOffsetAreaClass *klass); +static void gimp_offset_area_init (GimpOffsetArea *offset_area); + +static void gimp_offset_area_resize (GimpOffsetArea *offset_area); +static gboolean gimp_offset_area_event (GtkWidget *widget, + GdkEvent *event); +static void gimp_offset_area_draw (GimpOffsetArea *offset_area); static guint gimp_offset_area_signals[LAST_SIGNAL] = { 0 }; @@ -51,15 +53,32 @@ static guint gimp_offset_area_signals[LAST_SIGNAL] = { 0 }; static GtkDrawingAreaClass *parent_class = NULL; -static void -gimp_offset_area_destroy (GtkObject *object) +GType +gimp_offset_area_get_type (void) { - GimpOffsetArea *offset_area = GIMP_OFFSET_AREA (object); + static GType offset_area_type = 0; - g_return_if_fail (offset_area != NULL); + if (! offset_area_type) + { + static const GTypeInfo offset_area_info = + { + sizeof (GimpOffsetAreaClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_offset_area_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpOffsetArea), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_offset_area_init, + }; - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); + offset_area_type = g_type_register_static (GTK_TYPE_DRAWING_AREA, + "GimpOffsetArea", + &offset_area_info, 0); + } + + return offset_area_type; } static void @@ -68,8 +87,8 @@ gimp_offset_area_class_init (GimpOffsetAreaClass *klass) GtkObjectClass *object_class; GtkWidgetClass *widget_class; - object_class = (GtkObjectClass *) klass; - widget_class = (GtkWidgetClass *) klass; + object_class = GTK_OBJECT_CLASS (klass); + widget_class = GTK_WIDGET_CLASS (klass); parent_class = g_type_class_peek_parent (klass); @@ -84,8 +103,6 @@ gimp_offset_area_class_init (GimpOffsetAreaClass *klass) G_TYPE_INT, G_TYPE_INT); - object_class->destroy = gimp_offset_area_destroy; - widget_class->event = gimp_offset_area_event; } @@ -105,32 +122,6 @@ gimp_offset_area_init (GimpOffsetArea *offset_area) GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK); } -GtkType -gimp_offset_area_get_type (void) -{ - static GtkType offset_area_type = 0; - - if (!offset_area_type) - { - GtkTypeInfo offset_area_info = - { - "GimpOffsetArea", - sizeof (GimpOffsetArea), - sizeof (GimpOffsetAreaClass), - (GtkClassInitFunc) gimp_offset_area_class_init, - (GtkObjectInitFunc) gimp_offset_area_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL - }; - - offset_area_type = gtk_type_unique (gtk_drawing_area_get_type (), - &offset_area_info); - } - - return offset_area_type; -} - /** * gimp_offset_area_new: * @orig_width: the original width diff --git a/libgimpwidgets/gimpoffsetarea.h b/libgimpwidgets/gimpoffsetarea.h index d5f58a06b5..9a76349425 100644 --- a/libgimpwidgets/gimpoffsetarea.h +++ b/libgimpwidgets/gimpoffsetarea.h @@ -34,6 +34,7 @@ extern "C" { #define GIMP_OFFSET_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OFFSET_AREA, GimpOffsetAreaClass)) #define GIMP_IS_OFFSET_AREA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OFFSET_AREA)) #define GIMP_IS_OFFSET_AREA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OFFSET_AREA)) +#define GIMP_OFFSET_AREA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OFFSET_AREA, GimpOffsetAreaClass)) typedef struct _GimpOffsetAreaClass GimpOffsetAreaClass; @@ -62,9 +63,11 @@ struct _GimpOffsetAreaClass }; -GtkType gimp_offset_area_get_type (void); +GType gimp_offset_area_get_type (void); + GtkWidget * gimp_offset_area_new (gint orig_width, gint orig_height); + void gimp_offset_area_set_size (GimpOffsetArea *offset_area, gint width, gint height); diff --git a/libgimpwidgets/gimppatheditor.c b/libgimpwidgets/gimppatheditor.c index b02f11db73..9bb1b963e9 100644 --- a/libgimpwidgets/gimppatheditor.c +++ b/libgimpwidgets/gimppatheditor.c @@ -69,31 +69,30 @@ gimp_path_editor_get_type (void) if (! gpe_type) { - GtkTypeInfo gpe_info = + static const GTypeInfo gpe_info = { - "GimpPathEditor", + sizeof (GimpPathEditorClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_path_editor_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ sizeof (GimpPathEditor), - sizeof (GimpPathEditorClass), - (GtkClassInitFunc) gimp_path_editor_class_init, - (GtkObjectInitFunc) gimp_path_editor_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_path_editor_init, }; - gpe_type = gtk_type_unique (gtk_vbox_get_type (), &gpe_info); + gpe_type = g_type_register_static (GTK_TYPE_VBOX, + "GimpPathEditor", + &gpe_info, 0); } - + return gpe_type; } static void gimp_path_editor_class_init (GimpPathEditorClass *klass) { - GtkObjectClass *object_class; - - object_class = (GtkObjectClass *) klass; - parent_class = g_type_class_peek_parent (klass); gimp_path_editor_signals[PATH_CHANGED] = diff --git a/libgimpwidgets/gimppatheditor.h b/libgimpwidgets/gimppatheditor.h index 4963d15205..7930457d72 100644 --- a/libgimpwidgets/gimppatheditor.h +++ b/libgimpwidgets/gimppatheditor.h @@ -35,13 +35,14 @@ extern "C" { #define GIMP_PATH_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PATH_EDITOR, GimpPathEditorClass)) #define GIMP_IS_PATH_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GIMP_TYPE_PATH_EDITOR)) #define GIMP_IS_PATH_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PATH_EDITOR)) +#define GIMP_PATH_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PATH_EDITOR, GimpPathEditorClass)) typedef struct _GimpPathEditorClass GimpPathEditorClass; struct _GimpPathEditor { - GtkVBox vbox; + GtkVBox parent_instance; GtkWidget *upper_hbox; @@ -60,7 +61,7 @@ struct _GimpPathEditor struct _GimpPathEditorClass { - GtkVBoxClass parent_class; + GtkVBoxClass parent_class; void (* path_changed) (GimpPathEditor *gpe); }; diff --git a/libgimpwidgets/gimppixmap.c b/libgimpwidgets/gimppixmap.c index 7774c580a5..98f018eeb0 100644 --- a/libgimpwidgets/gimppixmap.c +++ b/libgimpwidgets/gimppixmap.c @@ -44,21 +44,24 @@ gimp_pixmap_get_type (void) { static GType pixmap_type = 0; - if (!pixmap_type) + if (! pixmap_type) { - GtkTypeInfo pixmap_info = + static const GTypeInfo pixmap_info = { - "GimpPixmap", - sizeof (GimpPixmap), - sizeof (GimpPixmapClass), - (GtkClassInitFunc) gimp_pixmap_class_init, - (GtkObjectInitFunc) gimp_pixmap_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + sizeof (GimpPixmapClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_pixmap_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (GimpPixmap), + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_pixmap_init, }; - pixmap_type = gtk_type_unique (GTK_TYPE_PIXMAP, &pixmap_info); + pixmap_type = g_type_register_static (GTK_TYPE_PIXMAP, + "GimpPixmap", + &pixmap_info, 0); } return pixmap_type; @@ -69,7 +72,7 @@ gimp_pixmap_class_init (GimpPixmapClass *klass) { GtkWidgetClass *widget_class; - widget_class = (GtkWidgetClass *) klass; + widget_class = GTK_WIDGET_CLASS (klass); parent_class = g_type_class_peek_parent (klass); diff --git a/libgimpwidgets/gimpsizeentry.c b/libgimpwidgets/gimpsizeentry.c index 75f53c82a3..f25aaa9b7e 100644 --- a/libgimpwidgets/gimpsizeentry.c +++ b/libgimpwidgets/gimpsizeentry.c @@ -75,7 +75,7 @@ struct _GimpSizeEntryField static void gimp_size_entry_class_init (GimpSizeEntryClass *class); static void gimp_size_entry_init (GimpSizeEntry *gse); -static void gimp_size_entry_destroy (GtkObject *object); +static void gimp_size_entry_finalize (GObject *object); static void gimp_size_entry_update_value (GimpSizeEntryField *gsef, gdouble value); @@ -103,19 +103,22 @@ gimp_size_entry_get_type (void) if (! gse_type) { - GtkTypeInfo gse_info = + static const GTypeInfo gse_info = { - "GimpSizeEntry", + sizeof (GimpSizeEntryClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_size_entry_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ sizeof (GimpSizeEntry), - sizeof (GimpSizeEntryClass), - (GtkClassInitFunc) gimp_size_entry_class_init, - (GtkObjectInitFunc) gimp_size_entry_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_size_entry_init, }; - gse_type = gtk_type_unique (GTK_TYPE_TABLE, &gse_info); + gse_type = g_type_register_static (GTK_TYPE_TABLE, + "GimpSizeEntry", + &gse_info, 0); } return gse_type; @@ -124,9 +127,9 @@ gimp_size_entry_get_type (void) static void gimp_size_entry_class_init (GimpSizeEntryClass *klass) { - GtkObjectClass *object_class; + GObjectClass *object_class; - object_class = (GtkObjectClass*) klass; + object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); @@ -157,11 +160,11 @@ gimp_size_entry_class_init (GimpSizeEntryClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - object_class->destroy = gimp_size_entry_destroy; + object_class->finalize = gimp_size_entry_finalize; - klass->value_changed = NULL; - klass->refval_changed = NULL; - klass->unit_changed = NULL; + klass->value_changed = NULL; + klass->refval_changed = NULL; + klass->unit_changed = NULL; } static void @@ -178,7 +181,7 @@ gimp_size_entry_init (GimpSizeEntry *gse) } static void -gimp_size_entry_destroy (GtkObject *object) +gimp_size_entry_finalize (GObject *object) { GimpSizeEntry *gse; @@ -193,8 +196,7 @@ gimp_size_entry_destroy (GtkObject *object) gse->fields = NULL; } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); + G_OBJECT_CLASS (parent_class)->finalize (object); } /** @@ -465,8 +467,8 @@ gimp_size_entry_attach_label (GimpSizeEntry *gse, { GtkWidget* label; - g_return_if_fail (gse != NULL); g_return_if_fail (GIMP_IS_SIZE_ENTRY (gse)); + g_return_if_fail (text != NULL); label = gtk_label_new (text); gtk_misc_set_alignment (GTK_MISC (label), alignment, 0.5); diff --git a/libgimpwidgets/gimpunitmenu.c b/libgimpwidgets/gimpunitmenu.c index d5d50de9a8..4a8d036d90 100644 --- a/libgimpwidgets/gimpunitmenu.c +++ b/libgimpwidgets/gimpunitmenu.c @@ -45,7 +45,7 @@ enum static void gimp_unit_menu_class_init (GimpUnitMenuClass *klass); static void gimp_unit_menu_init (GimpUnitMenu *gum); -static void gimp_unit_menu_destroy (GtkObject *object); +static void gimp_unit_menu_finalize (GObject *object); static const gchar * gimp_unit_menu_build_string (const gchar *format, GimpUnit unit); @@ -65,19 +65,22 @@ gimp_unit_menu_get_type (void) if (! gum_type) { - GtkTypeInfo gum_info = + static const GTypeInfo gum_info = { - "GimpUnitMenu", + sizeof (GimpUnitMenuClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) gimp_unit_menu_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ sizeof (GimpUnitMenu), - sizeof (GimpUnitMenuClass), - (GtkClassInitFunc) gimp_unit_menu_class_init, - (GtkObjectInitFunc) gimp_unit_menu_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL + 0, /* n_preallocs */ + (GInstanceInitFunc) gimp_unit_menu_init, }; - gum_type = gtk_type_unique (gtk_option_menu_get_type (), &gum_info); + gum_type = g_type_register_static (GTK_TYPE_OPTION_MENU, + "GimpUnitMenu", + &gum_info, 0); } return gum_type; @@ -86,9 +89,9 @@ gimp_unit_menu_get_type (void) static void gimp_unit_menu_class_init (GimpUnitMenuClass *klass) { - GtkObjectClass *object_class; + GObjectClass *object_class; - object_class = (GtkObjectClass *) klass; + object_class = G_OBJECT_CLASS (klass); parent_class = g_type_class_peek_parent (klass); @@ -101,9 +104,9 @@ gimp_unit_menu_class_init (GimpUnitMenuClass *klass) g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - object_class->destroy = gimp_unit_menu_destroy; + object_class->finalize = gimp_unit_menu_finalize; - klass->unit_changed = NULL; + klass->unit_changed = NULL; } static void @@ -118,7 +121,7 @@ gimp_unit_menu_init (GimpUnitMenu *gum) } static void -gimp_unit_menu_destroy (GtkObject *object) +gimp_unit_menu_finalize (GObject *object) { GimpUnitMenu *gum; @@ -132,8 +135,7 @@ gimp_unit_menu_destroy (GtkObject *object) gum->format = NULL; } - if (GTK_OBJECT_CLASS (parent_class)->destroy) - GTK_OBJECT_CLASS (parent_class)->destroy (object); + G_OBJECT_CLASS (parent_class)->finalize (object); } /** @@ -520,9 +522,8 @@ gimp_unit_menu_create_selection (GimpUnitMenu *gum) NULL); - g_signal_connect (G_OBJECT (gum->selection), "destroy", - G_CALLBACK (gtk_widget_destroyed), - &gum->selection); + g_object_add_weak_pointer (G_OBJECT (gum->selection), + (gpointer) &gum->selection); g_signal_connect_object (G_OBJECT (gum), "destroy", G_CALLBACK (gtk_widget_destroy), diff --git a/libgimpwidgets/gimpwidgetstypes.h b/libgimpwidgets/gimpwidgetstypes.h index ccd824994a..1b2b6d4585 100644 --- a/libgimpwidgets/gimpwidgetstypes.h +++ b/libgimpwidgets/gimpwidgetstypes.h @@ -33,6 +33,13 @@ extern "C" { /* For information look into the html documentation */ +typedef enum +{ + GIMP_COLOR_AREA_FLAT = 0, + GIMP_COLOR_AREA_SMALL_CHECKS, + GIMP_COLOR_AREA_LARGE_CHECKS +} GimpColorAreaType; + typedef enum { GIMP_SIZE_ENTRY_UPDATE_NONE = 0, @@ -45,6 +52,7 @@ typedef struct _GimpButton GimpButton; typedef struct _GimpChainButton GimpChainButton; typedef struct _GimpColorArea GimpColorArea; typedef struct _GimpColorButton GimpColorButton; +typedef struct _GimpDialog GimpDialog; typedef struct _GimpFileSelection GimpFileSelection; typedef struct _GimpOffsetArea GimpOffsetArea; typedef struct _GimpPathEditor GimpPathEditor;