X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=glabels2%2Fsrc%2Fobject-editor-image-page.c;h=a975ab292a0412cd069d84b22ffe5ea8f64857f6;hb=be11ca532e497806c00fa59c084b0710668226f8;hp=114e29e4264e832589aa85921f934c278247c398;hpb=174223a5516fbfc5e3b4a865b8310b51bed3dee2;p=glabels diff --git a/glabels2/src/object-editor-image-page.c b/glabels2/src/object-editor-image-page.c index 114e29e4..a975ab29 100644 --- a/glabels2/src/object-editor-image-page.c +++ b/glabels2/src/object-editor-image-page.c @@ -1,3 +1,5 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ + /* * (GLABELS) Label and Business Card Creation program for GNOME * @@ -26,11 +28,12 @@ #include #include #include -#include +#include #include #include #include "prefs.h" +#include "util.h" #include "object-editor-private.h" @@ -58,6 +61,7 @@ static void update_preview_cb (GtkFileChooser *file_chooser, gpointer data); static void add_image_filters_to_chooser (GtkFileChooser *file_chooser); +static void img_selection_changed_cb (glObjectEditor *editor); /*--------------------------------------------------------------------------*/ @@ -66,8 +70,6 @@ static void add_image_filters_to_chooser (GtkFileChooser *file_chooser); void gl_object_editor_prepare_image_page (glObjectEditor *editor) { - GdkColor *gdk_color; - GtkFileFilter *filter; GtkWidget *preview; @@ -84,8 +86,8 @@ gl_object_editor_prepare_image_page (glObjectEditor *editor) "img_file_button"); editor->priv->img_key_combo = glade_xml_get_widget (editor->priv->gui, "img_key_combo"); - editor->priv->img_key_entry = glade_xml_get_widget (editor->priv->gui, - "img_key_entry"); + + gl_util_combo_box_add_text_model ( GTK_COMBO_BOX(editor->priv->img_key_combo)); /* Modify file button properties. */ add_image_filters_to_chooser (GTK_FILE_CHOOSER (editor->priv->img_file_button)); @@ -101,9 +103,9 @@ gl_object_editor_prepare_image_page (glObjectEditor *editor) /* Connect signals */ g_signal_connect_swapped (G_OBJECT (editor->priv->img_file_button), "selection-changed", - G_CALLBACK (gl_object_editor_changed_cb), + G_CALLBACK (img_selection_changed_cb), G_OBJECT (editor)); - g_signal_connect_swapped (G_OBJECT (editor->priv->img_key_entry), + g_signal_connect_swapped (G_OBJECT (editor->priv->img_key_combo), "changed", G_CALLBACK (gl_object_editor_changed_cb), G_OBJECT (editor)); @@ -125,6 +127,8 @@ gl_object_editor_prepare_image_page (glObjectEditor *editor) static void img_radio_toggled_cb (glObjectEditor *editor) { + if (editor->priv->stop_signals) return; + gl_debug (DEBUG_WDGT, "START"); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->priv->img_file_radio))) { @@ -149,16 +153,9 @@ gl_object_editor_set_image (glObjectEditor *editor, gboolean merge_flag, glTextNode *text_node) { - gint pos; - gl_debug (DEBUG_EDITOR, "START"); - g_signal_handlers_block_by_func (G_OBJECT (editor->priv->img_file_button), - G_CALLBACK (gl_object_editor_changed_cb), - editor); - g_signal_handlers_block_by_func (G_OBJECT (editor->priv->img_key_entry), - G_CALLBACK (gl_object_editor_changed_cb), - editor); + editor->priv->stop_signals = TRUE; gtk_widget_set_sensitive (editor->priv->img_key_radio, merge_flag); @@ -183,20 +180,11 @@ gl_object_editor_set_image (glObjectEditor *editor, gtk_widget_set_sensitive (editor->priv->img_file_button, FALSE); gtk_widget_set_sensitive (editor->priv->img_key_combo, TRUE); - gtk_editable_delete_text (GTK_EDITABLE (editor->priv->img_key_entry), 0, -1); - pos = 0; - gtk_editable_insert_text (GTK_EDITABLE (editor->priv->img_key_entry), - text_node->data, - strlen (text_node->data), - &pos); + gl_util_combo_box_set_active_text (GTK_COMBO_BOX (editor->priv->img_key_combo), + text_node->data); } - g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->img_file_button), - G_CALLBACK (gl_object_editor_changed_cb), - editor); - g_signal_handlers_unblock_by_func (G_OBJECT (editor->priv->img_key_entry), - G_CALLBACK (gl_object_editor_changed_cb), - editor); + editor->priv->stop_signals = FALSE; gl_debug (DEBUG_EDITOR, "END"); } @@ -220,8 +208,7 @@ gl_object_editor_get_image (glObjectEditor *editor) } else { text_node->field_flag = TRUE; text_node->data = - gtk_editable_get_chars (GTK_EDITABLE (editor->priv->img_key_entry), - 0, -1); + gtk_combo_box_get_active_text (GTK_COMBO_BOX (editor->priv->img_key_combo)); } gl_debug (DEBUG_EDITOR, "text_node: field_flag=%d, data=%s", @@ -238,28 +225,28 @@ gl_object_editor_get_image (glObjectEditor *editor) static void update_preview_cb (GtkFileChooser *file_chooser, gpointer data) { - GtkWidget *preview; - char *filename; - GdkPixbuf *pixbuf; - gboolean have_preview; - - preview = GTK_WIDGET (data); - filename = gtk_file_chooser_get_preview_filename (file_chooser); - - if (filename) { - pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL); - have_preview = (pixbuf != NULL); - g_free (filename); - - gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf); - if (pixbuf) - gdk_pixbuf_unref (pixbuf); - - gtk_file_chooser_set_preview_widget_active (file_chooser, - have_preview); - } else { - gtk_file_chooser_set_preview_widget_active (file_chooser, FALSE); - } + GtkWidget *preview; + char *filename; + GdkPixbuf *pixbuf; + gboolean have_preview; + + preview = GTK_WIDGET (data); + filename = gtk_file_chooser_get_preview_filename (file_chooser); + + if (filename) { + pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL); + have_preview = (pixbuf != NULL); + g_free (filename); + + gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf); + if (pixbuf) + gdk_pixbuf_unref (pixbuf); + + gtk_file_chooser_set_preview_widget_active (file_chooser, + have_preview); + } else { + gtk_file_chooser_set_preview_widget_active (file_chooser, FALSE); + } } /*--------------------------------------------------------------------------*/ @@ -290,16 +277,19 @@ add_image_filters_to_chooser (GtkFileChooser *chooser) /* Individual image filters */ formats = gdk_pixbuf_get_formats (); for (it = formats; it != NULL; it = it->next) { - char *filter_name; + gchar *filter_name; GdkPixbufFormat *format; filter = gtk_file_filter_new (); + gchar *description, *name; format = (GdkPixbufFormat*) it->data; /* Filter name: First description then file extension, eg. "The PNG-Format (*.png)".*/ - filter_name = g_strdup_printf (_("%s (*.%s)"), - gdk_pixbuf_format_get_description (format), - gdk_pixbuf_format_get_name (format)); + description = gdk_pixbuf_format_get_description (format); + name = gdk_pixbuf_format_get_name (format); + filter_name = g_strdup_printf (_("%s (*.%s)"), description, name); + g_free (description); + g_free (name); gtk_file_filter_set_name (filter, filter_name); g_free (filter_name); @@ -334,3 +324,27 @@ add_image_filters_to_chooser (GtkFileChooser *chooser) } g_slist_free (filters); } + +/*--------------------------------------------------------------------------*/ +/* PRIVATE. Selection changed callback. */ +/*--------------------------------------------------------------------------*/ +static void +img_selection_changed_cb (glObjectEditor *editor) +{ + gchar *filename; + + if (editor->priv->stop_signals) return; + + gl_debug (DEBUG_EDITOR, "START"); + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(editor->priv->img_file_button)); + if (filename != NULL) + { + /* Emit our "changed" signal */ + g_signal_emit (G_OBJECT (editor), gl_object_editor_signals[CHANGED], 0); + } + g_free (filename); + + gl_debug (DEBUG_EDITOR, "END"); +} +