[gedit] EncodingsComboBox: code clean-up, improve doc
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] EncodingsComboBox: code clean-up, improve doc
- Date: Mon, 11 Aug 2014 17:31:02 +0000 (UTC)
commit 13f521729c15e7e55f2a64896cea3e75765e9743
Author: Sébastien Wilmet <swilmet gnome org>
Date: Sun Aug 10 23:27:23 2014 +0200
EncodingsComboBox: code clean-up, improve doc
gedit/gedit-encodings-combo-box.c | 208 +++++++++++++++++++++----------------
gedit/gedit-encodings-combo-box.h | 9 +-
2 files changed, 122 insertions(+), 95 deletions(-)
---
diff --git a/gedit/gedit-encodings-combo-box.c b/gedit/gedit-encodings-combo-box.c
index ffa91c2..0b27b3b 100644
--- a/gedit/gedit-encodings-combo-box.c
+++ b/gedit/gedit-encodings-combo-box.c
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* gedit-encodings-combo-box.c
* This file is part of gedit
@@ -23,16 +22,14 @@
#include <config.h>
#endif
+#include "gedit-encodings-combo-box.h"
+
#include <glib/gi18n.h>
-#include <gtksourceview/gtksource.h>
-#include "gedit-encodings-combo-box.h"
#include "gedit-encodings-dialog.h"
#include "gedit-settings.h"
#include "gedit-utils.h"
-#define ENCODING_KEY "Enconding"
-
struct _GeditEncodingsComboBoxPrivate
{
GSettings *enc_settings;
@@ -53,14 +50,12 @@ enum
N_COLUMNS
};
-/* Properties */
enum
{
PROP_0,
PROP_SAVE_MODE
};
-
G_DEFINE_TYPE_WITH_PRIVATE (GeditEncodingsComboBox, gedit_encodings_combo_box, GTK_TYPE_COMBO_BOX)
static void update_menu (GeditEncodingsComboBox *combo_box);
@@ -150,6 +145,16 @@ gedit_encodings_combo_box_class_init (GeditEncodingsComboBoxClass *klass)
object_class->dispose = gedit_encodings_combo_box_dispose;
object_class->constructed = gedit_encodings_combo_box_constructed;
+ /**
+ * GeditEncodingsComboBox:save-mode:
+ *
+ * Whether the combo box should be used for saving a content. If
+ * %FALSE, the combo box is used for loading a content (e.g. a file)
+ * and the row "Automatically Detected" is added.
+ */
+ /* TODO It'd be clearer if "save-mode" is renamed as "mode" with an
+ * enum: loading, saving. Or something like that.
+ */
g_object_class_install_property (object_class,
PROP_SAVE_MODE,
g_param_spec_boolean ("save-mode",
@@ -173,69 +178,75 @@ dialog_response_cb (GtkDialog *dialog,
}
static void
-add_or_remove (GeditEncodingsComboBox *menu,
- GtkTreeModel *model)
+configure_encodings (GeditEncodingsComboBox *menu)
{
- GtkTreeIter iter;
- gboolean add_item = FALSE;
+ GtkWidget *dialog;
- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (menu), &iter))
- {
- gtk_tree_model_get (model, &iter,
- COLUMN_ADD, &add_item,
- -1);
- }
+ GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (menu));
- if (!add_item)
+ if (!gtk_widget_is_toplevel (toplevel))
{
- menu->priv->activated_item = gtk_combo_box_get_active (GTK_COMBO_BOX (menu));
+ toplevel = NULL;
}
- else
- {
- GtkWidget *dialog;
- GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (menu));
+ g_signal_handler_block (menu, menu->priv->changed_id);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (menu),
+ menu->priv->activated_item);
+ g_signal_handler_unblock (menu, menu->priv->changed_id);
- if (!gtk_widget_is_toplevel (toplevel))
- toplevel = NULL;
+ dialog = gedit_encodings_dialog_new ();
- g_signal_handler_block (menu, menu->priv->changed_id);
- gtk_combo_box_set_active (GTK_COMBO_BOX (menu),
- menu->priv->activated_item);
- g_signal_handler_unblock (menu, menu->priv->changed_id);
+ if (toplevel != NULL)
+ {
+ GtkWindowGroup *wg;
- dialog = gedit_encodings_dialog_new();
+ gtk_window_set_transient_for (GTK_WINDOW (dialog),
+ GTK_WINDOW (toplevel));
- if (toplevel != NULL)
+ if (gtk_window_has_group (GTK_WINDOW (toplevel)))
{
- GtkWindowGroup *wg;
-
- gtk_window_set_transient_for (GTK_WINDOW (dialog),
- GTK_WINDOW (toplevel));
-
- if (gtk_window_has_group (GTK_WINDOW (toplevel)))
- {
- wg = gtk_window_get_group (GTK_WINDOW (toplevel));
- }
- else
- {
- wg = gtk_window_group_new ();
- gtk_window_group_add_window (wg,
- GTK_WINDOW (toplevel));
- }
-
- gtk_window_group_add_window (wg,
- GTK_WINDOW (dialog));
+ wg = gtk_window_get_group (GTK_WINDOW (toplevel));
}
+ else
+ {
+ wg = gtk_window_group_new ();
+ gtk_window_group_add_window (wg, GTK_WINDOW (toplevel));
+ }
+
+ gtk_window_group_add_window (wg, GTK_WINDOW (dialog));
+ }
+
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (dialog_response_cb),
+ menu);
+
+ gtk_widget_show (dialog);
+}
- gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+static void
+changed_cb (GeditEncodingsComboBox *menu,
+ GtkTreeModel *model)
+{
+ GtkTreeIter iter;
+ gboolean configure = FALSE;
- g_signal_connect (dialog,
- "response",
- G_CALLBACK (dialog_response_cb),
- menu);
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (menu), &iter))
+ {
+ gtk_tree_model_get (model, &iter,
+ COLUMN_ADD, &configure,
+ -1);
+ }
- gtk_widget_show (dialog);
+ if (configure)
+ {
+ configure_encodings (menu);
+ }
+ else
+ {
+ menu->priv->activated_item = gtk_combo_box_get_active (GTK_COMBO_BOX (menu));
}
}
@@ -248,13 +259,26 @@ separator_func (GtkTreeModel *model,
gboolean ret;
gtk_tree_model_get (model, iter, COLUMN_NAME, &str, -1);
- ret = (str == NULL || *str == '\0');
+ ret = (str == NULL || str[0] == '\0');
g_free (str);
return ret;
}
static void
+add_separator (GtkListStore *store)
+{
+ GtkTreeIter iter;
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COLUMN_NAME, "",
+ COLUMN_ENCODING, NULL,
+ COLUMN_ADD, FALSE,
+ -1);
+}
+
+static void
update_menu (GeditEncodingsComboBox *menu)
{
GtkListStore *store;
@@ -270,11 +294,7 @@ update_menu (GeditEncodingsComboBox *menu)
/* Unset the previous model */
g_signal_handler_block (menu, menu->priv->changed_id);
gtk_list_store_clear (store);
- gtk_combo_box_set_model (GTK_COMBO_BOX (menu),
- NULL);
-
- utf8_encoding = gtk_source_encoding_get_utf8 ();
- current_encoding = gtk_source_encoding_get_current ();
+ gtk_combo_box_set_model (GTK_COMBO_BOX (menu), NULL);
if (!menu->priv->save_mode)
{
@@ -285,15 +305,13 @@ update_menu (GeditEncodingsComboBox *menu)
COLUMN_ADD, FALSE,
-1);
- gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, "",
- COLUMN_ENCODING, NULL,
- COLUMN_ADD, FALSE,
- -1);
+ add_separator (store);
}
- if (current_encoding != utf8_encoding)
+ utf8_encoding = gtk_source_encoding_get_utf8 ();
+ current_encoding = gtk_source_encoding_get_current ();
+
+ if (utf8_encoding != current_encoding)
{
str = gtk_source_encoding_to_string (utf8_encoding);
}
@@ -312,8 +330,8 @@ update_menu (GeditEncodingsComboBox *menu)
g_free (str);
- if ((utf8_encoding != current_encoding) &&
- (current_encoding != NULL))
+ if (current_encoding != utf8_encoding &&
+ current_encoding != NULL)
{
str = g_strdup_printf (_("Current Locale (%s)"),
gtk_source_encoding_get_charset (current_encoding));
@@ -338,9 +356,9 @@ update_menu (GeditEncodingsComboBox *menu)
{
const GtkSourceEncoding *enc = l->data;
- if ((enc != current_encoding) &&
- (enc != utf8_encoding) &&
- (enc != NULL))
+ if (enc != current_encoding &&
+ enc != utf8_encoding &&
+ enc != NULL)
{
str = gtk_source_encoding_to_string (enc);
@@ -357,13 +375,7 @@ update_menu (GeditEncodingsComboBox *menu)
g_slist_free (encodings);
- gtk_list_store_append (store, &iter);
- /* separator */
- gtk_list_store_set (store, &iter,
- COLUMN_NAME, "",
- COLUMN_ENCODING, NULL,
- COLUMN_ADD, FALSE,
- -1);
+ add_separator (store);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
@@ -396,11 +408,23 @@ gedit_encodings_combo_box_init (GeditEncodingsComboBox *menu)
separator_func, NULL,
NULL);
- menu->priv->changed_id = g_signal_connect (menu, "changed",
- G_CALLBACK (add_or_remove),
+ menu->priv->changed_id = g_signal_connect (menu,
+ "changed",
+ G_CALLBACK (changed_cb),
menu->priv->store);
}
+/**
+ * gedit_encodings_combo_box_new:
+ * @save_mode: whether the combo box is used for saving a content.
+ *
+ * Creates a new encodings combo box object. If @save_mode is %FALSE, it means
+ * that the combo box is used for loading a content (e.g. a file), so the row
+ * "Automatically Detected" is added. For saving a content, the encoding must be
+ * provided.
+ *
+ * Returns: a new #GeditEncodingsComboBox object.
+ */
GtkWidget *
gedit_encodings_combo_box_new (gboolean save_mode)
{
@@ -409,6 +433,12 @@ gedit_encodings_combo_box_new (gboolean save_mode)
NULL);
}
+/**
+ * gedit_encodings_combo_box_get_selected_encoding:
+ * @menu: a #GeditEncodingsComboBox.
+ *
+ * Returns: the selected #GtkSourceEncoding.
+ */
const GtkSourceEncoding *
gedit_encodings_combo_box_get_selected_encoding (GeditEncodingsComboBox *menu)
{
@@ -435,9 +465,11 @@ gedit_encodings_combo_box_get_selected_encoding (GeditEncodingsComboBox *menu)
/**
* gedit_encodings_combo_box_set_selected_encoding:
- * @menu:
- * @encoding: (allow-none):
- **/
+ * @menu: a #GeditEncodingsComboBox.
+ * @encoding: the #GtkSourceEncoding.
+ *
+ * Sets the selected encoding.
+ */
void
gedit_encodings_combo_box_set_selected_encoding (GeditEncodingsComboBox *menu,
const GtkSourceEncoding *encoding)
@@ -445,8 +477,8 @@ gedit_encodings_combo_box_set_selected_encoding (GeditEncodingsComboBox *menu,
GtkTreeIter iter;
GtkTreeModel *model;
gboolean b;
+
g_return_if_fail (GEDIT_IS_ENCODINGS_COMBO_BOX (menu));
- g_return_if_fail (GTK_IS_COMBO_BOX (menu));
model = gtk_combo_box_get_model (GTK_COMBO_BOX (menu));
b = gtk_tree_model_get_iter_first (model, &iter);
@@ -461,9 +493,7 @@ gedit_encodings_combo_box_set_selected_encoding (GeditEncodingsComboBox *menu,
if (enc == encoding)
{
- gtk_combo_box_set_active_iter (GTK_COMBO_BOX (menu),
- &iter);
-
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (menu), &iter);
return;
}
diff --git a/gedit/gedit-encodings-combo-box.h b/gedit/gedit-encodings-combo-box.h
index 27318fb..f26db11 100644
--- a/gedit/gedit-encodings-combo-box.h
+++ b/gedit/gedit-encodings-combo-box.h
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* gedit-encodings-combo-box.h
* This file is part of gedit
@@ -22,7 +21,7 @@
#ifndef __GEDIT_ENCODINGS_COMBO_BOX_H__
#define __GEDIT_ENCODINGS_COMBO_BOX_H__
-#include <gtk/gtk.h>
+#include <gtksourceview/gtksource.h>
G_BEGIN_DECLS
@@ -33,10 +32,8 @@ G_BEGIN_DECLS
#define GEDIT_IS_ENCODINGS_COMBO_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GEDIT_TYPE_ENCODINGS_COMBO_BOX))
#define GEDIT_ENCODINGS_COMBO_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GEDIT_TYPE_ENCODINGS_COMBO_BOX, GeditEncodingsComboBoxClass))
-
-typedef struct _GeditEncodingsComboBox GeditEncodingsComboBox;
-typedef struct _GeditEncodingsComboBoxClass GeditEncodingsComboBoxClass;
-
+typedef struct _GeditEncodingsComboBox GeditEncodingsComboBox;
+typedef struct _GeditEncodingsComboBoxClass GeditEncodingsComboBoxClass;
typedef struct _GeditEncodingsComboBoxPrivate GeditEncodingsComboBoxPrivate;
struct _GeditEncodingsComboBox
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]