gtranslator r3690 - in trunk: . plugins/alternate-language



Author: icq
Date: Mon Sep 22 09:43:09 2008
New Revision: 3690
URL: http://svn.gnome.org/viewvc/gtranslator?rev=3690&view=rev

Log:
Squashed commit of the following:

commit 5227c05f254649f3334b9217a4bf7b175282e3a3
Author: Ignacio Casal Quinteiro <nacho resa gmail com>
Date:   Tue Aug 12 17:02:04 2008 +0200

    2008-08-12  Ignacio Casal Quinteiro  <nacho resa gmail com>

    	* plugins/alternate-language/alternate-language-plugin.c
    	(on_alternate_lang_activated), (free_window_data),
    	(update_ui_real), (create_alternate_lang_plugin_panel),
    	(impl_activate), (impl_deactivate), (impl_update_ui),
    	(gtranslator_alternate_lang_plugin_class_init):
    	Added menuitem to switch to the Alternate lang tab.

Modified:
   trunk/ChangeLog
   trunk/plugins/alternate-language/alternate-language-plugin.c

Modified: trunk/plugins/alternate-language/alternate-language-plugin.c
==============================================================================
--- trunk/plugins/alternate-language/alternate-language-plugin.c	(original)
+++ trunk/plugins/alternate-language/alternate-language-plugin.c	Mon Sep 22 09:43:09 2008
@@ -28,6 +28,8 @@
 #include <glib/gi18n-lib.h>
 
 #define WINDOW_DATA_KEY	"GtranslatorAlternateLangPluginWindowData"
+#define TAB_DATA_KEY    "GtranslatorAlternateLangPluginTabData"
+#define MENU_PATH "/MainMenu/ViewMenu/ViewOps_2"
 
 #define GTR_MESSAGE_TABLE_GET_PRIVATE(object) \
 				(G_TYPE_INSTANCE_GET_PRIVATE ((object),	\
@@ -35,9 +37,58 @@
 				GtranslatorAlternateLangPluginPrivate))
 
 GTR_PLUGIN_REGISTER_TYPE_WITH_CODE (GtranslatorAlternateLangPlugin, gtranslator_alternate_lang_plugin,
-		gtranslator_alternate_lang_panel_register_type (module);
+				    gtranslator_alternate_lang_panel_register_type (module);
 )
 
+static void
+on_alternate_lang_activated (GtkAction *action,
+			     GtranslatorWindow *window)
+{
+	GtranslatorTab *tab;
+	GtkWidget *alternatelang;
+	
+	tab = gtranslator_window_get_active_tab (window);
+	alternatelang = g_object_get_data (G_OBJECT (tab), TAB_DATA_KEY);
+	
+	gtranslator_tab_show_lateral_panel_widget (GTR_TAB (tab),
+						   alternatelang);
+}
+
+static const GtkActionEntry action_entries[] =
+{
+	{ "AlternateLang", NULL, N_("_Alterante Language"), "<control>L",
+	 N_("Show the Alternate Language panel"),
+	 G_CALLBACK (on_alternate_lang_activated)}, 
+};
+
+typedef struct
+{
+	GtkActionGroup *action_group;
+	guint           ui_id;
+} WindowData;
+
+static void
+free_window_data (WindowData *data)
+{
+	g_return_if_fail (data != NULL);
+
+	g_free (data);
+}
+
+static void
+update_ui_real (GtranslatorWindow *window,
+		WindowData   *data)
+{
+	GtranslatorTab *tab;
+	GtkAction *action;
+
+	tab = gtranslator_window_get_active_tab (window);
+
+	action = gtk_action_group_get_action (data->action_group,
+					      "AlternateLang");
+	gtk_action_set_sensitive (action,
+				  (tab != NULL));
+}
 
 static void
 gtranslator_alternate_lang_plugin_init (GtranslatorAlternateLangPlugin *message_table)
@@ -72,8 +123,8 @@
 						     _("Alternate Language"));
 	
 	g_object_set_data (G_OBJECT (child),
-			   WINDOW_DATA_KEY,
-			   alternatelang);
+			   TAB_DATA_KEY,
+			   alternatelang);	
 }
 
 static void
@@ -82,6 +133,37 @@
 {
 	GtranslatorNotebook *notebook;
 	GList *tabs = NULL;
+	GtkUIManager *manager;
+	WindowData *data;
+	
+	data = g_new (WindowData, 1);
+
+	manager = gtranslator_window_get_ui_manager (window);
+
+	data->action_group = gtk_action_group_new ("GtranslatorAlternateLangPluginActions");
+	gtk_action_group_set_translation_domain (data->action_group, 
+						 GETTEXT_PACKAGE);
+	gtk_action_group_add_actions (data->action_group,
+				      action_entries,
+				      G_N_ELEMENTS (action_entries), 
+				      window);
+
+	gtk_ui_manager_insert_action_group (manager, data->action_group, -1);
+
+	data->ui_id = gtk_ui_manager_new_merge_id (manager);
+
+	g_object_set_data_full (G_OBJECT (window), 
+				WINDOW_DATA_KEY, 
+				data,
+				(GDestroyNotify) free_window_data);
+	
+	gtk_ui_manager_add_ui (manager,
+			       data->ui_id,
+			       MENU_PATH,
+			       "AlternateLang",
+			       "AlternateLang",
+			       GTK_UI_MANAGER_MENUITEM,
+			       FALSE);
 	
 	notebook = gtranslator_window_get_notebook(window);
 	
@@ -98,7 +180,6 @@
 						   tabs->data,
 						   0, window);
 	}while((tabs = g_list_next(tabs)));
-
 }
 
 static void
@@ -108,25 +189,49 @@
 	GtranslatorNotebook *notebook;
 	GtkWidget *alternatelang;
 	GList *tabs;
+	GtkUIManager *manager;
+	WindowData *data;
 	
-	tabs = gtranslator_window_get_all_tabs(window);
-	notebook = gtranslator_window_get_notebook(window);
+	tabs = gtranslator_window_get_all_tabs (window);
+	notebook = gtranslator_window_get_notebook (window);
 
 	if (tabs != NULL)
 	{
 		do{
-			alternatelang = g_object_get_data(G_OBJECT(tabs->data), WINDOW_DATA_KEY);
+			alternatelang = g_object_get_data (G_OBJECT (tabs->data), TAB_DATA_KEY);
 			gtranslator_tab_remove_widget_from_lateral_panel (GTR_TAB (tabs->data),
 									  alternatelang);
 
 			g_object_set_data (G_OBJECT (tabs->data), WINDOW_DATA_KEY, NULL);
-		
-		}while((tabs = g_list_next(tabs)));
+		}while ((tabs = g_list_next (tabs)));
 	}
 	
-	g_signal_handlers_disconnect_by_func(notebook,
-					     create_alternate_lang_plugin_panel,
-					     window);
+	g_signal_handlers_disconnect_by_func (notebook,
+					      create_alternate_lang_plugin_panel,
+					      window);
+	
+	/* Remove menuitem */
+	manager = gtranslator_window_get_ui_manager (window);
+	
+	data = (WindowData *) g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
+	g_return_if_fail (data != NULL);
+
+	gtk_ui_manager_remove_ui (manager, data->ui_id);
+	gtk_ui_manager_remove_action_group (manager, data->action_group);
+
+	g_object_set_data (G_OBJECT (window), WINDOW_DATA_KEY, NULL);	
+}
+
+static void
+impl_update_ui (GtranslatorPlugin *plugin,
+		GtranslatorWindow *window)
+{
+	WindowData *data;
+
+	data = (WindowData *) g_object_get_data (G_OBJECT (window), WINDOW_DATA_KEY);
+	g_return_if_fail (data != NULL);
+
+	update_ui_real (window, data);
 }
 
 static void
@@ -139,4 +244,5 @@
 
 	plugin_class->activate = impl_activate;
 	plugin_class->deactivate = impl_deactivate;
+	plugin_class->update_ui = impl_update_ui;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]