+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
+
/*
* (GLABELS) Label and Business Card Creation program for GNOME
*
#include <glib/gi18n.h>
#include <gtk/gtkimage.h>
#include <gtk/gtkfilechooserbutton.h>
-#include <gtk/gtkeditable.h>
+#include <gtk/gtkcombobox.h>
#include <gtk/gtktogglebutton.h>
#include <math.h>
#include "prefs.h"
+#include "util.h"
#include "object-editor-private.h"
gpointer data);
static void add_image_filters_to_chooser (GtkFileChooser *file_chooser);
+static void img_selection_changed_cb (glObjectEditor *editor);
\f
/*--------------------------------------------------------------------------*/
void
gl_object_editor_prepare_image_page (glObjectEditor *editor)
{
- GdkColor *gdk_color;
- GtkFileFilter *filter;
GtkWidget *preview;
"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));
/* 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));
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))) {
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);
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");
}
} 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",
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);
+ }
}
/*--------------------------------------------------------------------------*/
/* 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);
}
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");
+}
+