gnome-terminal r2452 - trunk/src
- From: chpe svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-terminal r2452 - trunk/src
- Date: Wed, 19 Mar 2008 15:20:32 +0000 (GMT)
Author: chpe
Date: Wed Mar 19 15:20:32 2008
New Revision: 2452
URL: http://svn.gnome.org/viewvc/gnome-terminal?rev=2452&view=rev
Log:
Implement encodings submenu.
Modified:
trunk/src/terminal-window.c
trunk/src/terminal.ui
Modified: trunk/src/terminal-window.c
==============================================================================
--- trunk/src/terminal-window.c (original)
+++ trunk/src/terminal-window.c Wed Mar 19 15:20:32 2008
@@ -50,6 +50,9 @@
GtkActionGroup *profiles_action_group;
guint profiles_ui_id;
+ GtkActionGroup *encodings_action_group;
+ guint encodings_ui_id;
+
GtkWidget *menubar;
GtkWidget *notebook;
GList *tab_menuitems;
@@ -175,7 +178,7 @@
TerminalWindow *window);
static void terminal_set_title_callback (GtkAction *action,
TerminalWindow *window);
-static void terminal_set_encoding_callback (GtkAction *action,
+static void terminal_add_encoding_callback (GtkAction *action,
TerminalWindow *window);
static void terminal_reset_callback (GtkAction *action,
TerminalWindow *window);
@@ -192,8 +195,6 @@
static void tabs_detach_tab_callback (GtkAction *action,
TerminalWindow *window);
-static void add_encoding_callback (GtkAction *action,
- TerminalWindow *window);
static void change_tab_callback (GtkAction *action,
TerminalWindow *window);
/* FIXME? */
@@ -221,8 +222,6 @@
G_DEFINE_TYPE (TerminalWindow, terminal_window, GTK_TYPE_WINDOW)
-#define PROFILES_UI_PATH "/menubar/Terminal/TerminalProfiles/StartPH"
-
static char *
escape_underscores (const char *name)
{
@@ -269,6 +268,8 @@
g_signal_handlers_unblock_by_func (priv->active_term, G_CALLBACK (profile_set_callback), window);
}
+#define PROFILES_UI_PATH "/menubar/Terminal/TerminalProfiles"
+
static void
terminal_window_update_set_profile_menu (TerminalWindow *window)
{
@@ -343,6 +344,9 @@
g_signal_connect (profile_action, "toggled",
G_CALLBACK (terminal_set_profile_toggled_callback), window);
+ gtk_action_group_add_action (action_group, GTK_ACTION (profile_action));
+ g_object_unref (profile_action);
+
gtk_ui_manager_add_ui (priv->ui_manager, priv->profiles_ui_id,
PROFILES_UI_PATH,
name, name,
@@ -480,97 +484,126 @@
#endif
}
+#define SET_ENCODING_ACTION_NAME_PREFIX "TerminalSetEncoding"
+
static void
-fill_in_encoding_menu (TerminalWindow *window)
+terminal_set_encoding_callback (GtkToggleAction *action,
+ TerminalWindow *window)
{
-#if 0
TerminalWindowPrivate *priv = window->priv;
- GtkWidget *menu;
- GtkWidget *menu_item;
+ const char *name;
+ const char *charset;
+ GtkWidget *widget;
+
+ if (!gtk_toggle_action_get_active (action))
+ return;
+
+ if (priv->active_term == NULL)
+ return;
+
+ name = gtk_action_get_name (GTK_ACTION (action));
+ g_assert (g_str_has_prefix (name, SET_ENCODING_ACTION_NAME_PREFIX));
+ charset = name + strlen (SET_ENCODING_ACTION_NAME_PREFIX);
+
+ widget = terminal_screen_get_widget (priv->active_term);
+ terminal_widget_set_encoding (widget, charset);
+}
+
+#define SET_ENCODING_UI_PATH "/menubar/Terminal/TerminalSetEncoding/EncodingsPH"
+
+static void
+terminal_window_update_encoding_menu (TerminalWindow *window)
+{
+ TerminalWindowPrivate *priv = window->priv;
+ GtkActionGroup *action_group;
+ GtkAction *action;
+ GList *profiles, *p;
GSList *group;
- GSList *encodings;
- GSList *tmp;
+ guint n;
+ GSList *encodings, *l;
const char *charset;
- GtkWidget *w;
+ GtkWidget *widget;
if (!terminal_widget_supports_dynamic_encoding ())
return;
- if (priv->active_term == NULL)
+ /* Remove the old UI */
+ if (priv->encodings_ui_id != 0)
{
- gtk_widget_set_sensitive (priv->encoding_menuitem, FALSE);
- gtk_menu_item_remove_submenu (GTK_MENU_ITEM (priv->encoding_menuitem));
+ gtk_ui_manager_remove_ui (priv->ui_manager, priv->encodings_ui_id);
+ priv->encodings_ui_id = 0;
+ }
- return;
+ if (priv->encodings_action_group != NULL)
+ {
+ gtk_ui_manager_remove_action_group (priv->ui_manager,
+ priv->encodings_action_group);
+ priv->encodings_action_group = NULL;
}
-
- gtk_widget_set_sensitive (priv->encoding_menuitem, TRUE);
- menu = gtk_menu_new ();
- gtk_menu_item_set_submenu (GTK_MENU_ITEM (priv->encoding_menuitem),
- menu);
+ /* FIXMEchpe */
+ if (priv->active_term == NULL)
+ return;
+
+ action_group = priv->encodings_action_group = gtk_action_group_new ("Encodings");
+ gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, -1);
+ g_object_unref (action_group);
+
+ priv->encodings_ui_id = gtk_ui_manager_new_merge_id (priv->ui_manager);
- w = terminal_screen_get_widget (priv->active_term);
- charset = terminal_widget_get_encoding (w);
+ widget = terminal_screen_get_widget (priv->active_term);
+ charset = terminal_widget_get_encoding (widget);
- group = NULL;
encodings = terminal_get_active_encodings ();
- tmp = encodings;
- while (tmp != NULL)
+
+ group = NULL;
+ n = 0;
+ for (l = encodings; l != NULL; l = l->next)
{
- TerminalEncoding *e;
- char *name;
+ TerminalEncoding *e = (TerminalEncoding *) l->data;
+ GtkRadioAction *encoding_action;
+ char name[128];
+ char *display_name;
- e = tmp->data;
+ g_snprintf (name, sizeof (name), SET_ENCODING_ACTION_NAME_PREFIX "%s", e->charset);
+ display_name = g_strdup_printf ("%s (%s)", e->name, e->charset);
- name = g_strdup_printf ("%s (%s)", e->name, e->charset);
-
- menu_item = gtk_radio_menu_item_new_with_label (group, name);
+ g_print ("Encoding name %s encoding %s\n", e->name, e->charset);
- g_free (name);
+ encoding_action = gtk_radio_action_new (name,
+ display_name,
+ NULL,
+ NULL,
+ n);
+ g_free (display_name);
+
+ gtk_radio_action_set_group (encoding_action, group);
+ group = gtk_radio_action_get_group (encoding_action);
- group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
- gtk_widget_show (menu_item);
- gtk_menu_shell_append (GTK_MENU_SHELL (menu),
- menu_item);
-
if (strcmp (e->charset, charset) == 0)
- gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item),
- TRUE);
-
- g_signal_connect (G_OBJECT (menu_item),
- "toggled",
- G_CALLBACK (change_encoding_callback),
- window);
-
- g_object_set_data_full (G_OBJECT (menu_item),
- "encoding",
- g_strdup (e->charset),
- (GDestroyNotify) g_free);
-
- tmp = tmp->next;
+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (encoding_action), TRUE);
+
+ g_signal_connect (encoding_action, "toggled",
+ G_CALLBACK (terminal_set_encoding_callback), window);
+
+ gtk_action_group_add_action (action_group, GTK_ACTION (encoding_action));
+ g_object_unref (encoding_action);
+
+ gtk_ui_manager_add_ui (priv->ui_manager, priv->encodings_ui_id,
+ SET_ENCODING_UI_PATH,
+ name, name,
+ GTK_UI_MANAGER_MENUITEM, FALSE);
}
- g_slist_foreach (encodings,
- (GFunc) terminal_encoding_free,
- NULL);
+ g_slist_foreach (encodings, (GFunc) terminal_encoding_free, NULL);
g_slist_free (encodings);
-
- menu_item = gtk_separator_menu_item_new ();
- gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
- gtk_widget_show (menu_item);
-
- append_menuitem (menu, _("_Add or Remove..."), NULL,
- G_CALLBACK (add_encoding_callback),
- window);
-#endif
}
static void
terminal_menu_activate_callback (GtkAction *action,
TerminalWindow *window)
{
- fill_in_encoding_menu (window);
+ terminal_window_update_encoding_menu (window);
}
static void
@@ -858,9 +891,7 @@
{ "TerminalSetTitle", NULL, N_("_Set Titleâ"), NULL,
NULL,
G_CALLBACK (terminal_set_title_callback) },
- { "TerminalSetEncoding", NULL, N_("Set _Character Encoding"), NULL,
- NULL,
- G_CALLBACK (terminal_set_encoding_callback) },
+ { "TerminalSetEncoding", NULL, N_("Set _Character Encoding") },
{ "TerminalReset", NULL, N_("_Reset"), NULL,
NULL,
G_CALLBACK (terminal_reset_callback) },
@@ -868,6 +899,10 @@
NULL,
G_CALLBACK (terminal_reset_clear_callback) },
+ /* Terminal/Encodings menu */
+ { "TerminalAddEncoding", NULL, N_("_Add or Removeâ"), NULL,
+ NULL,
+ G_CALLBACK (terminal_add_encoding_callback) },
/* Tabs menu */
{ "TabsPrevious", NULL, N_("_Previous Tab"), "<control>Page_Up",
@@ -1709,7 +1744,7 @@
terminal_window_update_set_profile_menu (window); /* FIXMEchpe no need to do this, just update the current profile action's active state! */
fill_in_new_term_submenus (window);
- fill_in_encoding_menu (window);
+ terminal_window_update_encoding_menu (window);
update_zoom_items (window);
}
@@ -2619,31 +2654,6 @@
}
static void
-terminal_set_encoding_callback (GtkAction *action,
- TerminalWindow *window)
-{
-#if 0
- TerminalWindowPrivate *priv = window->priv;
- const char *charset;
- GtkWidget *widget;
-
- if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu_item)))
- return;
-
- if (priv->active_term == NULL)
- return;
-
- charset = g_object_get_data (G_OBJECT (menu_item),
- "encoding");
-
- g_assert (charset);
-
- widget = terminal_screen_get_widget (priv->active_term);
- terminal_widget_set_encoding (widget, charset);
-#endif
-}
-
-static void
terminal_add_encoding_callback (GtkAction *action,
TerminalWindow *window)
{
Modified: trunk/src/terminal.ui
==============================================================================
--- trunk/src/terminal.ui (original)
+++ trunk/src/terminal.ui Wed Mar 19 15:20:32 2008
@@ -28,7 +28,11 @@
<menu action="Terminal">
<menu action="TerminalProfiles" />
<menuitem action="TerminalSetTitle" />
- <menuitem action="TerminalSetEncoding" />
+ <menu action="TerminalSetEncoding" >
+ <placeholder name="EncodingsPH" />
+ <separator />
+ <menuitem action="TerminalAddEncoding" />
+ </menu>
<separator />
<menuitem action="TerminalReset" />
<menuitem action="TerminalResetClear" />
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]