Exemplo n.º 1
0
GtkWidget *
libbalsa_window_get_menu_bar(GtkApplicationWindow * window,
                             const GActionEntry   * entries,
                             gint                   n_entries,
                             const gchar          * ui_file,
                             GError              ** error,
                             gpointer               cb_data)
{
    GActionMap *map = G_ACTION_MAP(window);
    GtkBuilder *builder;
    GtkWidget *menu_bar = NULL;

    g_action_map_add_action_entries(map, entries, n_entries, cb_data);

    builder = gtk_builder_new();
    if (gtk_builder_add_from_file(builder, ui_file, error)) {
        GMenuModel *menu_model;

        menu_model =
            G_MENU_MODEL(gtk_builder_get_object(builder, "menubar"));

        menu_bar = gtk_menu_bar_new_from_model(menu_model);

        libbalsa_window_set_accels(window, menu_model);
        gtk_application_window_set_show_menubar(window, FALSE);
    }
    g_object_unref(builder);

    return menu_bar;
}
static void
gtk_application_window_update_menubar (GtkApplicationWindow *window)
{
  gboolean should_have_menubar;
  gboolean have_menubar;

  have_menubar = window->priv->menubar != NULL;

  should_have_menubar = window->priv->show_menubar &&
                        (g_menu_model_get_n_items (G_MENU_MODEL (window->priv->app_menu_section)) ||
                         g_menu_model_get_n_items (G_MENU_MODEL (window->priv->menubar_section)));

  if (have_menubar && !should_have_menubar)
    {
      gtk_widget_unparent (window->priv->menubar);
      window->priv->menubar = NULL;

      gtk_widget_queue_resize (GTK_WIDGET (window));
    }

  if (!have_menubar && should_have_menubar)
    {
      GMenu *combined;

      combined = g_menu_new ();
      g_menu_append_section (combined, NULL, G_MENU_MODEL (window->priv->app_menu_section));
      g_menu_append_section (combined, NULL, G_MENU_MODEL (window->priv->menubar_section));

      window->priv->menubar = gtk_menu_bar_new_from_model (G_MENU_MODEL (combined));
      gtk_widget_set_parent (window->priv->menubar, GTK_WIDGET (window));
      gtk_widget_show_all (window->priv->menubar);
      g_object_unref (combined);

      gtk_widget_queue_resize (GTK_WIDGET (window));
    }
}
Exemplo n.º 3
0
static void
do_appwindow (GSimpleAction *action,
              GVariant      *parameter,
              gpointer       user_data)
{
  GtkWidget *window;
  GtkWidget *grid;
  GtkWidget *statusbar;
  GtkWidget *contents;
  GtkWidget *sw;
  GtkTextBuffer *buffer;
  GSimpleActionGroup *action_group;
  GtkBuilder *builder;
  GMenuModel *model;
  GtkWidget *menubar;
  GtkWidget *toolbar;

  /* Create the toplevel window
   */

  ++window_count;

  aspect_on = FALSE;

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window), "Application Window");

  g_signal_connect (G_OBJECT (window), "destroy",
                    G_CALLBACK (destroy_cb), NULL);

  grid = gtk_grid_new ();

  gtk_widget_set_vexpand (grid, TRUE);
  gtk_widget_set_hexpand (grid, TRUE);

  gtk_container_add (GTK_CONTAINER (window), grid);

  action_group = g_simple_action_group_new ();
  builder = gtk_builder_new_from_string (xml, -1);

  g_action_map_add_action_entries (G_ACTION_MAP (action_group),
                                   demo_entries,
                                   G_N_ELEMENTS (demo_entries),
                                   window);
  gtk_widget_insert_action_group (window, "demo", G_ACTION_GROUP (action_group));

  /* Create the menubar
   */

  model = G_MENU_MODEL (gtk_builder_get_object (builder, "menubar"));
  menubar = gtk_menu_bar_new_from_model (model);
  gtk_grid_attach (GTK_GRID (grid), menubar, 0, 0, 1, 1);
  gtk_widget_set_hexpand (menubar, TRUE);

  /* Create the toolbar
   */

  toolbar = create_toolbar ();
  gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 1, 1, 1);
  gtk_widget_set_hexpand (toolbar, TRUE);

  /* Create document
   */

  contents = gtk_text_view_new ();

  sw = gtk_scrolled_window_new (NULL, NULL);

  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
                                  GTK_POLICY_AUTOMATIC,
                                  GTK_POLICY_AUTOMATIC);

  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
                                       GTK_SHADOW_IN);

  gtk_grid_attach (GTK_GRID (grid), sw, 0, 2, 1, 1);

  gtk_widget_set_hexpand (sw, TRUE);
  gtk_widget_set_vexpand (sw, TRUE);

  gtk_window_set_default_size (GTK_WINDOW (window),
                               200, 200);

  gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (contents),
                               PANGO_WRAP_WORD);

  gtk_container_add (GTK_CONTAINER (sw),
                     contents);

  /* Create statusbar
   */

  statusbar = gtk_statusbar_new ();
  gtk_grid_attach (GTK_GRID (grid), statusbar, 0, 3, 1, 1);
  gtk_widget_set_hexpand (statusbar, TRUE);

  /* Show text widget info in the statusbar */

  buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));

  gtk_text_buffer_set_text (buffer,
                            "This demo demonstrates various kinds of windows that "
                            "window managers and window manager themes should handle. "
                            "Be sure to tear off the menu and toolbar, those are also "
                            "a special kind of window.",
                            -1);

  g_signal_connect_object (buffer,
                           "changed",
                           G_CALLBACK (update_statusbar),
                           statusbar,
                           0);

  g_signal_connect_object (buffer,
                           "mark_set", /* cursor moved */
                           G_CALLBACK (mark_set_callback),
                           statusbar,
                           0);

  update_statusbar (buffer, GTK_STATUSBAR (statusbar));

  gtk_widget_show_all (window);

  g_object_unref (action_group);
  g_object_unref (builder);
}
Exemplo n.º 4
0
/*********************************************************************** Menu */
void
bmd_construct_menu (GtkApplication *app, gpointer data)
{
	GtkWidget *menubar;
	GMenu *menu, *filemenu, *editmenu, *helpmenu, *savemenu, *quitmenu;

	bmd_widgets *a = (bmd_widgets *) data;

	// define keyboard accelerators
	const gchar *open_accels[2] = { "<Ctrl>O", NULL };
	const gchar *save_accels[2] = { "<Ctrl>S", NULL };
	const gchar *quit_accels[2] = { "<Ctrl>Q", NULL };
	const gchar *add_accels[2] = { "<Ctrl>A", NULL };
	const gchar *del_accels[2] = { "<Ctrl>D", NULL };
	const gchar *find_accels[2] = { "<Ctrl>F", NULL };
	const gchar *help_accels[2] = { "F1", NULL };

	/* map app entries to actions using the global structure */
	g_action_map_add_action_entries (G_ACTION_MAP (app), app_entries,
					 G_N_ELEMENTS (app_entries), (gpointer) a);

	/* create the menu */
	menu = g_menu_new();

	/* create the File menu */
	filemenu = g_menu_new();
	g_menu_append (filemenu, "_Open", "app.open");
	savemenu = g_menu_new();
	g_menu_append (savemenu, "_Save", "app.save");
	g_menu_append (savemenu, "Save As ...", "app.saveAs");
	g_menu_append_section (filemenu, NULL, G_MENU_MODEL (savemenu));
	quitmenu = g_menu_new();
	g_menu_append (quitmenu, "_Quit", "app.quit");
	g_menu_append_section (filemenu, NULL, G_MENU_MODEL (quitmenu));
	g_menu_insert_submenu (menu, 0, "_File", G_MENU_MODEL (filemenu));
	g_object_unref (savemenu);
	g_object_unref (quitmenu);
	g_object_unref (filemenu);

	/* create the Edit menu */
	editmenu = g_menu_new();
	g_menu_append (editmenu, "_Find", "app.find");
	g_menu_append (editmenu, "_Add", "app.add");
	g_menu_append (editmenu, "_Delete", "app.delete");
	g_menu_append_submenu (menu, "_Edit", G_MENU_MODEL (editmenu));
	g_object_unref (editmenu);

	/* create the Help menu */
	helpmenu = g_menu_new();
	g_menu_append (helpmenu, "About", "app.about");
	g_menu_append (helpmenu, "Help", "app.help");
	g_menu_append_submenu (menu, "_Help", G_MENU_MODEL (helpmenu));
	g_object_unref (helpmenu);

	/* create a menu bar and add the above menus */
	menubar = gtk_menu_bar_new_from_model (G_MENU_MODEL (menu));
	gtk_box_pack_start (GTK_BOX (a->box), menubar, FALSE, FALSE, 0);

	/* connect keyboard accelerators */
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.open", open_accels);
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.save", save_accels);
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.quit", quit_accels);
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.add", add_accels);
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.delete", del_accels);
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.find", find_accels);
	gtk_application_set_accels_for_action (GTK_APPLICATION (app),
					       "app.help", help_accels);
}
Exemplo n.º 5
0
void
gw_window_load_menubar (GwWindow *window, const gchar* BASE_NAME)
{
    //Declarations
    GwWindowPrivate *priv;
    GtkBuilder *builder;
    GtkApplication *application;
    GMenuModel *win_menu_model;
    gboolean loaded;
    gboolean os_shows_app_menu;
    gboolean os_shows_win_menu;
    gchar *filename;
    GtkWidget *menubar;
    GtkSettings *settings;
    
    //Initializations
    priv = window->priv;
    application = GTK_APPLICATION (gw_window_get_application (window));
    menubar = NULL;
    loaded = FALSE;
    builder = NULL;
    filename = NULL;
    win_menu_model = NULL;

    settings = gtk_settings_get_default ();
    g_object_get (settings, "gtk-shell-shows-app-menu", &os_shows_app_menu, NULL);
    g_object_get (settings, "gtk-shell-shows-menubar", &os_shows_win_menu, NULL);

    builder = gtk_builder_new (); 
    if (builder == NULL) goto errored;

    if (os_shows_app_menu && os_shows_win_menu) //Mac OS X style
    {
      filename = g_strjoin ("-", BASE_NAME, "menumodel", "macosx.ui", NULL);
      if (filename == NULL) goto errored;
    }
    else if (os_shows_app_menu != os_shows_win_menu) //Gnome 3 style
    {
      filename = g_strjoin ("-", BASE_NAME, "menumodel", "gnome.ui", NULL);
      if (filename == NULL) goto errored;
    }
    else //Windows style
    {
      filename = g_strjoin ("-", BASE_NAME, "menumodel", "standard.ui", NULL);
      if (filename == NULL) goto errored;
    }

    loaded = gw_application_load_xml (builder, filename); 
    if (loaded == FALSE) goto errored;
    win_menu_model = G_MENU_MODEL (gtk_builder_get_object (builder, "menu")); 
    if (win_menu_model == NULL) goto errored;


    //Set the whole menu to the window if appropriate
    if (os_shows_win_menu == FALSE)
    {
      menubar = gtk_menu_bar_new_from_model (win_menu_model);
      if (menubar == NULL) goto errored;
      gtk_box_pack_end (GTK_BOX (priv->toplevel), menubar, FALSE, FALSE, 0);
      gtk_widget_show_all (menubar);
    }

    gw_application_add_accelerators (GW_APPLICATION (application), win_menu_model);

    //Save the menu objects in the window
    if (priv->menu_model != NULL) g_object_unref (priv->menu_model);
    priv->menu_model = win_menu_model; win_menu_model = NULL;
    if (priv->menubar != NULL) gtk_widget_destroy (GTK_WIDGET (priv->menubar)); 
    priv->menubar = GTK_MENU_BAR (menubar); menubar = NULL;

errored:
    if (builder != NULL) g_object_unref (builder); builder = NULL;
    if (filename != NULL) g_free (filename); filename = NULL;
    if (win_menu_model != NULL) g_object_unref (G_OBJECT (win_menu_model));
    if (menubar != NULL) { g_object_ref_sink (menubar); gtk_widget_destroy (menubar); };
}