[grilo] test-ui: Use GMenu and GAction for application menu



commit adc11e54537aff804c6dcd8d26ade0114632157b
Author: veer <bveer428 gmail com>
Date:   Tue Jun 12 04:34:54 2018 +0530

    test-ui: Use GMenu and GAction for application menu
    
    This fixes the following deprecation warnings:
    
     | main.c: In function ‘changes_notification_cb’:
     | main.c:286:3: warning: ‘gtk_toggle_action_get_active’ is deprecated
     |    ui_state->changes_notification = gtk_toggle_action_get_active (action);
     |    ^~~~~~~~
    
     | main.c: In function ‘ui_setup’:
     | main.c:1878:3: warning: ‘gtk_action_group_new’ is deprecated
     |    GtkActionGroup *actions = gtk_action_group_new ("actions");
     |    ^~~~~~~~~~~~~~
    
     | main.c:1879:3: warning: ‘gtk_action_group_add_actions’ is deprecated
     |    gtk_action_group_add_actions (actions, entries, G_N_ELEMENTS (entries), NULL);
     |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
     | main.c:1880:3: warning: ‘gtk_action_group_add_toggle_actions’ is deprecated
     |    gtk_action_group_add_toggle_actions (actions, toggle_entries, G_N_ELEMENTS (toggle_entries), NULL);
     |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
     | main.c:1882:3: warning: ‘gtk_ui_manager_new’ is deprecated
     |    GtkUIManager *uiman = gtk_ui_manager_new ();
     |    ^~~~~~~~~~~~
    
     | main.c:1883:3: warning: ‘gtk_ui_manager_insert_action_group’ is deprecated
     |    gtk_ui_manager_insert_action_group (uiman, actions, 0);
     |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
     | main.c:1885:31: warning: ‘gtk_ui_manager_get_accel_group’ is deprecated
     |                                gtk_ui_manager_get_accel_group (uiman));
     |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
     | main.c:1886:3: warning: ‘gtk_ui_manager_add_ui_from_string’ is deprecated
     |    gtk_ui_manager_add_ui_from_string (uiman, ui_definition, -1, NULL);
     |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
     | main.c:1890:23: warning: ‘gtk_ui_manager_get_widget’ is deprecated
     |                        gtk_ui_manager_get_widget (uiman, "/MainMenu"),
     |                        ^~~~~~~~~~~~~~~~~~~~~~~~~
    
    Signed-off-by: Victor Toso <victortoso redhat com>

 tools/grilo-test-ui/main.c | 192 ++++++++++++++++++++++++++++++---------------
 1 file changed, 128 insertions(+), 64 deletions(-)
---
diff --git a/tools/grilo-test-ui/main.c b/tools/grilo-test-ui/main.c
index 4e6f728..2bf15fc 100644
--- a/tools/grilo-test-ui/main.c
+++ b/tools/grilo-test-ui/main.c
@@ -193,97 +193,154 @@ static UiView *view;
 static UiState *ui_state;
 static UriLaunchers *launchers;
 
-static const gchar *ui_definition =
-"<ui>"
-" <menubar name='MainMenu'>"
-"  <menu name='FileMenu' action='FileMenuAction' >"
-#ifdef HAVE_OAUTH
-"   <menuitem name='Authorize Flickr' action='AuthorizeFlickrAction' />"
-#endif
-"   <menuitem name='Shutdown plugins' action='ShutdownPluginsAction' />"
-"   <menuitem name='Load all plugins' action='LoadAllPluginsAction' />"
-"   <menuitem name='Changes notification' action='ChangesNotificationAction' />"
-"   <menuitem name='Quit' action='QuitAction' />"
-"  </menu>"
-" </menubar>"
-"</ui>";
-
 static GrlOperationOptions *default_options = NULL;
 static GrlOperationOptions *default_resolve_options = NULL;
 
+static const char *ui_definition =
+  "<interface>"
+  "<menu id='menu'>"
+  "  <section>"
+  "    <submenu>"
+  "      <attribute name='label' translatable='yes'>File</attribute>"
+  "      <section>"
+  "        <item>"
+  "          <attribute name='label' translatable='yes'>_Authorize Flickr</attribute>"
+  "          <attribute name='action'>app.authorize-flickr</attribute>"
+  "        </item>"
+  "      </section>"
+  "      <section>"
+  "        <item>"
+  "          <attribute name='label' translatable='yes'>_Shutdown Plugins</attribute>"
+  "          <attribute name='action'>app.shutdown-plugins</attribute>"
+  "        </item>"
+  "        <item>"
+  "          <attribute name='label' translatable='yes'>_Load All Plugins</attribute>"
+  "          <attribute name='action'>app.load-all-plugins</attribute>"
+  "        </item>"
+  "      </section>"
+  "      <section>"
+  "        <item>"
+  "          <attribute name='label' translatable='yes'>_Changes notification</attribute>"
+  "          <attribute name='action'>app.changes-notification</attribute>"
+  "        </item>"
+  "      </section>"
+  "      <section>"
+  "        <item>"
+  "          <attribute name='label' translatable='yes'>_Quit</attribute>"
+  "          <attribute name='action'>app.quit</attribute>"
+  "          <attribute name='accel'>&lt;Primary&gt;q</attribute>"
+  "        </item>"
+  "      </section>"
+  "    </submenu>"
+  "  </section>"
+  "</menu>"
+  "</interface>";
+
 static void show_browsable_sources (void);
-static void quit_cb (GtkAction *action);
+static void quit_cb (GSimpleAction *action,
+                     GVariant      *parameter,
+                     gpointer       user_data);
 
 #ifdef HAVE_OAUTH
 static gchar *authorize_flickr (void);
-static void authorize_flickr_cb (GtkAction *action);
+static void authorize_flickr_cb (GSimpleAction *action,
+                                 GVariant      *parameter,
+                                 gpointer       user_data);
+
 #endif
 
-static void shutdown_plugins_cb (GtkAction *action);
+static void shutdown_plugins_cb (GSimpleAction *action,
+                                 GVariant      *parameter,
+                                 gpointer       user_data);
+
 static void shutdown_plugins (void);
 
-static void load_all_plugins_cb (GtkAction *action);
+static void load_all_plugins_cb (GSimpleAction *action,
+                                 GVariant      *parameter,
+                                 gpointer       user_data);
 static void load_all_plugins (void);
 
-static void changes_notification_cb (GtkToggleAction *action);
+static void changes_notification_cb (GSimpleAction *action,
+                                     GVariant      *parameter,
+                                     gpointer       user_data);
+
 static void content_changed_cb (GrlSource *source,
                                 GPtrArray *changed_medias,
                                 GrlSourceChangeType change_type,
                                 gboolean location_unknown,
                                 gpointer data);
 
-static GtkActionEntry entries[] = {
-  { "FileMenuAction", NULL, "_File" },
+static GActionEntry app_entries[] =
+{
 #ifdef HAVE_OAUTH
-  { "AuthorizeFlickrAction", NULL, "_Authorize Flickr", NULL,
-    "AuthorizeFlickr", G_CALLBACK (authorize_flickr_cb) },
+  { "authorize-flickr", authorize_flickr_cb, NULL, NULL, NULL },
 #endif
-  { "ShutdownPluginsAction", NULL, "_Shutdown Plugins", NULL,
-    "ShutdownPlugins", G_CALLBACK (shutdown_plugins_cb) },
-  { "LoadAllPluginsAction", NULL, "_Load All Plugins", NULL,
-    "LoadAllPlugins", G_CALLBACK (load_all_plugins_cb) },
-  { "QuitAction", NULL, "_Quit", "<control>Q",
-    "Quit", G_CALLBACK (quit_cb) }
+  { "shutdown-plugins", shutdown_plugins_cb, NULL, NULL, NULL },
+  { "load-all-plugins", load_all_plugins_cb, NULL, NULL, NULL },
+  { "changes-notification", NULL, NULL, "false", changes_notification_cb },
+  { "quit", quit_cb, NULL, NULL, NULL },
 };
 
-static GtkToggleActionEntry toggle_entries[] = {
-  { "ChangesNotificationAction", NULL, "_Changes notification", NULL,
-    "ChangesNotification", G_CALLBACK (changes_notification_cb), FALSE }
-};
+static void
+menu_setup (GApplication *app)
+{
+  GtkBuilder *builder;
+  GMenuModel *app_menu;
+
+  g_action_map_add_action_entries (G_ACTION_MAP (app),
+                                   app_entries, G_N_ELEMENTS (app_entries),
+                                   app);
+  builder = gtk_builder_new_from_string (ui_definition, -1);
+  app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "menu"));
+  gtk_application_set_menubar (GTK_APPLICATION (app), app_menu);
+
+  g_object_unref (builder);
+}
 
 static void
-quit_cb (GtkAction *action)
+quit_cb (GSimpleAction *action,
+         GVariant      *parameter,
+         gpointer       user_data)
 {
-  gtk_main_quit ();
+  g_application_quit (G_APPLICATION (user_data));
 }
 
 #ifdef HAVE_OAUTH
 static void
-authorize_flickr_cb (GtkAction *action)
+authorize_flickr_cb (GSimpleAction *action,
+                     GVariant      *parameter,
+                     gpointer       user_data)
 {
   authorize_flickr ();
 }
 #endif
 
 static void
-shutdown_plugins_cb (GtkAction *action)
+shutdown_plugins_cb (GSimpleAction *action,
+                     GVariant      *parameter,
+                     gpointer       user_data)
 {
   shutdown_plugins ();
 }
 
 static void
-load_all_plugins_cb (GtkAction *action)
+load_all_plugins_cb (GSimpleAction *action,
+                     GVariant      *parameter,
+                     gpointer       user_data)
 {
   load_all_plugins ();
 }
 
 static void
-changes_notification_cb (GtkToggleAction *action)
+changes_notification_cb (GSimpleAction *action,
+                         GVariant      *parameter,
+                         gpointer       user_data)
 {
   GList *sources, *source;
   GrlRegistry *registry;
 
-  ui_state->changes_notification = gtk_toggle_action_get_active (action);
+  ui_state->changes_notification = g_variant_get_boolean (parameter);
+  g_simple_action_set_state (action, parameter);
 
   registry = grl_registry_get_default ();
   sources = grl_registry_get_sources (registry, FALSE);
@@ -1857,38 +1914,31 @@ delete_event_cb (GtkWidget *widget,
                 GdkEvent  *event,
                 gpointer   user_data)
 {
+  GApplication *app = g_application_get_default ();
+
   gtk_widget_hide (widget);
-  gtk_main_quit ();
+  g_application_quit (app);
+
   return TRUE;
 }
 
 static void
-ui_setup (void)
+ui_setup (GApplication *app)
 {
   view = g_new0 (UiView, 1);
   ui_state = g_new0 (UiState, 1);
 
   /* Main window */
-  view->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  view->window = gtk_application_window_new (GTK_APPLICATION (app));
   gtk_window_set_title (GTK_WINDOW (view->window), WINDOW_TITLE);
   gtk_window_resize (GTK_WINDOW (view->window), 600, 400);
   g_signal_connect (G_OBJECT (view->window), "delete-event",
                     G_CALLBACK (delete_event_cb), NULL);
 
-  GtkActionGroup *actions = gtk_action_group_new ("actions");
-  gtk_action_group_add_actions (actions, entries, G_N_ELEMENTS (entries), NULL);
-  gtk_action_group_add_toggle_actions (actions, toggle_entries, G_N_ELEMENTS (toggle_entries), NULL);
-
-  GtkUIManager *uiman = gtk_ui_manager_new ();
-  gtk_ui_manager_insert_action_group (uiman, actions, 0);
-  gtk_window_add_accel_group (GTK_WINDOW (view->window),
-                              gtk_ui_manager_get_accel_group (uiman));
-  gtk_ui_manager_add_ui_from_string (uiman, ui_definition, -1, NULL);
+  /* Menu bar */
+  menu_setup (app);
 
   GtkWidget *mainbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
-  gtk_box_pack_start (GTK_BOX (mainbox),
-                      gtk_ui_manager_get_widget (uiman, "/MainMenu"),
-                      FALSE, FALSE, 0);
   gtk_container_add (GTK_CONTAINER (view->window), mainbox);
 
   /* Main layout */
@@ -2390,19 +2440,33 @@ configure_plugins (void)
   set_filesystem_config ();
 }
 
-int
-main (int argc, gchar *argv[])
+static void
+activate (GApplication *app,
+          gpointer      user_data)
 {
-  gtk_init (&argc, &argv);
-  grl_init (&argc, &argv);
-  GRL_LOG_DOMAIN_INIT (test_ui_log_domain, "test-ui");
   launchers_setup ();
   options_setup ();
-  ui_setup ();
+  ui_setup (app);
   configure_plugins ();
   load_plugins ();
-  gtk_main ();
+}
+
+int
+main (int argc, char **argv)
+{
+  GtkApplication *app;
+  int status;
+
+  grl_init (&argc, &argv);
+  GRL_LOG_DOMAIN_INIT (test_ui_log_domain, "test-ui");
+
+  app = gtk_application_new ("org.gnome.grilotestui", G_APPLICATION_FLAGS_NONE);
+  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
+  status = g_application_run (G_APPLICATION (app), argc, argv);
+  g_object_unref (app);
+
   clear_ui ();
   grl_deinit ();
-  return 0;
+
+  return status;
 }


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