Blame demos/gtk-demo/appwindow.c

Packit Service fb6fa5
/* Application main window
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * Demonstrates a typical application window with menubar, toolbar, statusbar.
Packit Service fb6fa5
 */
Packit Service fb6fa5
Packit Service fb6fa5
#include <gtk/gtk.h>
Packit Service fb6fa5
#include "config.h"
Packit Service fb6fa5
#include "demo-common.h"
Packit Service fb6fa5
Packit Service fb6fa5
static GtkWidget *window = NULL;
Packit Service fb6fa5
static GtkWidget *infobar = NULL;
Packit Service fb6fa5
static GtkWidget *messagelabel = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
activate_action (GtkAction *action)
Packit Service fb6fa5
{
Packit Service fb6fa5
  const gchar *name = gtk_action_get_name (action);
Packit Service fb6fa5
  const gchar *typename = G_OBJECT_TYPE_NAME (action);
Packit Service fb6fa5
Packit Service fb6fa5
  GtkWidget *dialog;
Packit Service fb6fa5
Packit Service fb6fa5
  dialog = gtk_message_dialog_new (GTK_WINDOW (window),
Packit Service fb6fa5
                                   GTK_DIALOG_DESTROY_WITH_PARENT,
Packit Service fb6fa5
                                   GTK_MESSAGE_INFO,
Packit Service fb6fa5
                                   GTK_BUTTONS_CLOSE,
Packit Service fb6fa5
                                   "You activated action: \"%s\" of type \"%s\"",
Packit Service fb6fa5
                                    name, typename);
Packit Service fb6fa5
Packit Service fb6fa5
  /* Close dialog on user response */
Packit Service fb6fa5
  g_signal_connect (dialog,
Packit Service fb6fa5
                    "response",
Packit Service fb6fa5
                    G_CALLBACK (gtk_widget_destroy),
Packit Service fb6fa5
                    NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_widget_show (dialog);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
activate_radio_action (GtkAction *action, GtkRadioAction *current)
Packit Service fb6fa5
{
Packit Service fb6fa5
  const gchar *name = gtk_action_get_name (GTK_ACTION (current));
Packit Service fb6fa5
  const gchar *typename = G_OBJECT_TYPE_NAME (GTK_ACTION (current));
Packit Service fb6fa5
  gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current));
Packit Service fb6fa5
  gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current));
Packit Service fb6fa5
Packit Service fb6fa5
  if (active)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gchar *text;
Packit Service fb6fa5
Packit Service fb6fa5
      text = g_strdup_printf ("You activated radio action: \"%s\" of type \"%s\".\n"
Packit Service fb6fa5
                              "Current value: %d",
Packit Service fb6fa5
                              name, typename, value);
Packit Service fb6fa5
      gtk_label_set_text (GTK_LABEL (messagelabel), text);
Packit Service fb6fa5
      gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), (GtkMessageType)value);
Packit Service fb6fa5
      gtk_widget_show (infobar);
Packit Service fb6fa5
      g_free (text);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
about_cb (GtkAction *action,
Packit Service fb6fa5
	  GtkWidget *window)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GdkPixbuf *pixbuf, *transparent;
Packit Service fb6fa5
  gchar *filename;
Packit Service fb6fa5
Packit Service fb6fa5
  const gchar *authors[] = {
Packit Service fb6fa5
    "Peter Mattis",
Packit Service fb6fa5
    "Spencer Kimball",
Packit Service fb6fa5
    "Josh MacDonald",
Packit Service fb6fa5
    "and many more...",
Packit Service fb6fa5
    NULL
Packit Service fb6fa5
  };
Packit Service fb6fa5
Packit Service fb6fa5
  const gchar *documentors[] = {
Packit Service fb6fa5
    "Owen Taylor",
Packit Service fb6fa5
    "Tony Gale",
Packit Service fb6fa5
    "Matthias Clasen <mclasen@redhat.com>",
Packit Service fb6fa5
    "and many more...",
Packit Service fb6fa5
    NULL
Packit Service fb6fa5
  };
Packit Service fb6fa5
Packit Service fb6fa5
  const gchar *license =
Packit Service fb6fa5
    "This library is free software; you can redistribute it and/or\n"
Packit Service fb6fa5
    "modify it under the terms of the GNU Library General Public License as\n"
Packit Service fb6fa5
    "published by the Free Software Foundation; either version 2 of the\n"
Packit Service fb6fa5
    "License, or (at your option) any later version.\n"
Packit Service fb6fa5
    "\n"
Packit Service fb6fa5
    "This library is distributed in the hope that it will be useful,\n"
Packit Service fb6fa5
    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
Packit Service fb6fa5
    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
Packit Service fb6fa5
    "Library General Public License for more details.\n"
Packit Service fb6fa5
    "\n"
Packit Service fb6fa5
    "You should have received a copy of the GNU Library General Public\n"
Packit Service fb6fa5
    "License along with the Gnome Library; see the file COPYING.LIB.  If not,\n"
Packit Service fb6fa5
    "write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
Packit Service fb6fa5
    "Boston, MA 02111-1307, USA.\n";
Packit Service fb6fa5
Packit Service fb6fa5
  pixbuf = NULL;
Packit Service fb6fa5
  transparent = NULL;
Packit Service fb6fa5
  filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
Packit Service fb6fa5
  if (filename)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
Packit Service fb6fa5
      g_free (filename);
Packit Service fb6fa5
      transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);
Packit Service fb6fa5
      g_object_unref (pixbuf);
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_show_about_dialog (GTK_WINDOW (window),
Packit Service fb6fa5
			 "program-name", "GTK+ Code Demos",
Packit Service fb6fa5
			 "version", PACKAGE_VERSION,
Packit Service fb6fa5
			 "copyright", "(C) 1997-2009 The GTK+ Team",
Packit Service fb6fa5
			 "license", license,
Packit Service fb6fa5
			 "website", "http://www.gtk.org",
Packit Service fb6fa5
			 "comments", "Program to demonstrate GTK+ functions.",
Packit Service fb6fa5
			 "authors", authors,
Packit Service fb6fa5
			 "documenters", documentors,
Packit Service fb6fa5
			 "logo", transparent,
Packit Service fb6fa5
                         "title", "About GTK+ Code Demos",
Packit Service fb6fa5
			 NULL);
Packit Service fb6fa5
Packit Service fb6fa5
  g_object_unref (transparent);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkAction action;
Packit Service fb6fa5
} ToolMenuAction;
Packit Service fb6fa5
Packit Service fb6fa5
typedef struct
Packit Service fb6fa5
{
Packit Service fb6fa5
  GtkActionClass parent_class;
Packit Service fb6fa5
} ToolMenuActionClass;
Packit Service fb6fa5
Packit Service fb6fa5
G_DEFINE_TYPE(ToolMenuAction, tool_menu_action, GTK_TYPE_ACTION)
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
tool_menu_action_class_init (ToolMenuActionClass *class)
Packit Service fb6fa5
{
Packit Service fb6fa5
  GTK_ACTION_CLASS (class)->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON;
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
tool_menu_action_init (ToolMenuAction *action)
Packit Service fb6fa5
{
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static GtkActionEntry entries[] = {
Packit Service fb6fa5
  { "FileMenu", NULL, "_File" },               /* name, stock id, label */
Packit Service fb6fa5
  { "OpenMenu", NULL, "_Open" },               /* name, stock id, label */
Packit Service fb6fa5
  { "PreferencesMenu", NULL, "_Preferences" }, /* name, stock id, label */
Packit Service fb6fa5
  { "ColorMenu", NULL, "_Color"  },            /* name, stock id, label */
Packit Service fb6fa5
  { "ShapeMenu", NULL, "_Shape" },             /* name, stock id, label */
Packit Service fb6fa5
  { "HelpMenu", NULL, "_Help" },               /* name, stock id, label */
Packit Service fb6fa5
  { "New", GTK_STOCK_NEW,                      /* name, stock id */
Packit Service fb6fa5
    "_New", "<control>N",                      /* label, accelerator */
Packit Service fb6fa5
    "Create a new file",                       /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action) },
Packit Service fb6fa5
  { "File1", NULL,                             /* name, stock id */
Packit Service fb6fa5
    "File1", NULL,                             /* label, accelerator */
Packit Service fb6fa5
    "Open first file",                         /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action) },
Packit Service fb6fa5
  { "Save", GTK_STOCK_SAVE,                    /* name, stock id */
Packit Service fb6fa5
    "_Save","<control>S",                      /* label, accelerator */
Packit Service fb6fa5
    "Save current file",                       /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action) },
Packit Service fb6fa5
  { "SaveAs", GTK_STOCK_SAVE,                  /* name, stock id */
Packit Service fb6fa5
    "Save _As...", NULL,                       /* label, accelerator */
Packit Service fb6fa5
    "Save to a file",                          /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action) },
Packit Service fb6fa5
  { "Quit", GTK_STOCK_QUIT,                    /* name, stock id */
Packit Service fb6fa5
    "_Quit", "<control>Q",                     /* label, accelerator */
Packit Service fb6fa5
    "Quit",                                    /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action) },
Packit Service fb6fa5
  { "About", NULL,                             /* name, stock id */
Packit Service fb6fa5
    "_About", "<control>A",                    /* label, accelerator */
Packit Service fb6fa5
    "About",                                   /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (about_cb) },
Packit Service fb6fa5
  { "Logo", "demo-gtk-logo",                   /* name, stock id */
Packit Service fb6fa5
     NULL, NULL,                               /* label, accelerator */
Packit Service fb6fa5
    "GTK+",                                    /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action) },
Packit Service fb6fa5
};
Packit Service fb6fa5
static guint n_entries = G_N_ELEMENTS (entries);
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
static GtkToggleActionEntry toggle_entries[] = {
Packit Service fb6fa5
  { "Bold", GTK_STOCK_BOLD,                    /* name, stock id */
Packit Service fb6fa5
     "_Bold", "<control>B",                    /* label, accelerator */
Packit Service fb6fa5
    "Bold",                                    /* tooltip */
Packit Service fb6fa5
    G_CALLBACK (activate_action),
Packit Service fb6fa5
    TRUE },                                    /* is_active */
Packit Service fb6fa5
};
Packit Service fb6fa5
static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
Packit Service fb6fa5
Packit Service fb6fa5
enum {
Packit Service fb6fa5
  COLOR_RED,
Packit Service fb6fa5
  COLOR_GREEN,
Packit Service fb6fa5
  COLOR_BLUE
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static GtkRadioActionEntry color_entries[] = {
Packit Service fb6fa5
  { "Red", NULL,                               /* name, stock id */
Packit Service fb6fa5
    "_Red", "<control>R",                      /* label, accelerator */
Packit Service fb6fa5
    "Blood", COLOR_RED },                      /* tooltip, value */
Packit Service fb6fa5
  { "Green", NULL,                             /* name, stock id */
Packit Service fb6fa5
    "_Green", "<control>G",                    /* label, accelerator */
Packit Service fb6fa5
    "Grass", COLOR_GREEN },                    /* tooltip, value */
Packit Service fb6fa5
  { "Blue", NULL,                              /* name, stock id */
Packit Service fb6fa5
    "_Blue", "<control>B",                     /* label, accelerator */
Packit Service fb6fa5
    "Sky", COLOR_BLUE },                       /* tooltip, value */
Packit Service fb6fa5
};
Packit Service fb6fa5
static guint n_color_entries = G_N_ELEMENTS (color_entries);
Packit Service fb6fa5
Packit Service fb6fa5
enum {
Packit Service fb6fa5
  SHAPE_SQUARE,
Packit Service fb6fa5
  SHAPE_RECTANGLE,
Packit Service fb6fa5
  SHAPE_OVAL
Packit Service fb6fa5
};
Packit Service fb6fa5
Packit Service fb6fa5
static GtkRadioActionEntry shape_entries[] = {
Packit Service fb6fa5
  { "Square", NULL,                            /* name, stock id */
Packit Service fb6fa5
    "_Square", "<control>S",                   /* label, accelerator */
Packit Service fb6fa5
    "Square",  SHAPE_SQUARE },                 /* tooltip, value */
Packit Service fb6fa5
  { "Rectangle", NULL,                         /* name, stock id */
Packit Service fb6fa5
    "_Rectangle", "<control>R",                /* label, accelerator */
Packit Service fb6fa5
    "Rectangle", SHAPE_RECTANGLE },            /* tooltip, value */
Packit Service fb6fa5
  { "Oval", NULL,                              /* name, stock id */
Packit Service fb6fa5
    "_Oval", "<control>O",                     /* label, accelerator */
Packit Service fb6fa5
    "Egg", SHAPE_OVAL },                       /* tooltip, value */
Packit Service fb6fa5
};
Packit Service fb6fa5
static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
Packit Service fb6fa5
Packit Service fb6fa5
static const gchar *ui_info =
Packit Service fb6fa5
"<ui>"
Packit Service fb6fa5
"  <menubar name='MenuBar'>"
Packit Service fb6fa5
"    <menu action='FileMenu'>"
Packit Service fb6fa5
"      <menuitem action='New'/>"
Packit Service fb6fa5
"      <menuitem action='Open'/>"
Packit Service fb6fa5
"      <menuitem action='Save'/>"
Packit Service fb6fa5
"      <menuitem action='SaveAs'/>"
Packit Service fb6fa5
"      <separator/>"
Packit Service fb6fa5
"      <menuitem action='Quit'/>"
Packit Service fb6fa5
"    </menu>"
Packit Service fb6fa5
"    <menu action='PreferencesMenu'>"
Packit Service fb6fa5
"      <menu action='ColorMenu'>"
Packit Service fb6fa5
"	<menuitem action='Red'/>"
Packit Service fb6fa5
"	<menuitem action='Green'/>"
Packit Service fb6fa5
"	<menuitem action='Blue'/>"
Packit Service fb6fa5
"      </menu>"
Packit Service fb6fa5
"      <menu action='ShapeMenu'>"
Packit Service fb6fa5
"        <menuitem action='Square'/>"
Packit Service fb6fa5
"        <menuitem action='Rectangle'/>"
Packit Service fb6fa5
"        <menuitem action='Oval'/>"
Packit Service fb6fa5
"      </menu>"
Packit Service fb6fa5
"      <menuitem action='Bold'/>"
Packit Service fb6fa5
"    </menu>"
Packit Service fb6fa5
"    <menu action='HelpMenu'>"
Packit Service fb6fa5
"      <menuitem action='About'/>"
Packit Service fb6fa5
"    </menu>"
Packit Service fb6fa5
"  </menubar>"
Packit Service fb6fa5
"  <toolbar name='ToolBar'>"
Packit Service fb6fa5
"    <toolitem action='Open'>"
Packit Service fb6fa5
"      <menu action='OpenMenu'>"
Packit Service fb6fa5
"        <menuitem action='File1'/>"
Packit Service fb6fa5
"      </menu>"
Packit Service fb6fa5
"    </toolitem>"
Packit Service fb6fa5
"    <toolitem action='Quit'/>"
Packit Service fb6fa5
"    <separator action='Sep1'/>"
Packit Service fb6fa5
"    <toolitem action='Logo'/>"
Packit Service fb6fa5
"  </toolbar>"
Packit Service fb6fa5
"</ui>";
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
/* This function registers our custom toolbar icons, so they can be themed.
Packit Service fb6fa5
 *
Packit Service fb6fa5
 * It's totally optional to do this, you could just manually insert icons
Packit Service fb6fa5
 * and have them not be themeable, especially if you never expect people
Packit Service fb6fa5
 * to theme your app.
Packit Service fb6fa5
 */
Packit Service fb6fa5
static void
Packit Service fb6fa5
register_stock_icons (void)
Packit Service fb6fa5
{
Packit Service fb6fa5
  static gboolean registered = FALSE;
Packit Service fb6fa5
Packit Service fb6fa5
  if (!registered)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GdkPixbuf *pixbuf;
Packit Service fb6fa5
      GtkIconFactory *factory;
Packit Service fb6fa5
      char *filename;
Packit Service fb6fa5
Packit Service fb6fa5
      static GtkStockItem items[] = {
Packit Service fb6fa5
        { "demo-gtk-logo",
Packit Service fb6fa5
          "_GTK!",
Packit Service fb6fa5
          0, 0, NULL }
Packit Service fb6fa5
      };
Packit Service fb6fa5
Packit Service fb6fa5
      registered = TRUE;
Packit Service fb6fa5
Packit Service fb6fa5
      /* Register our stock items */
Packit Service fb6fa5
      gtk_stock_add (items, G_N_ELEMENTS (items));
Packit Service fb6fa5
Packit Service fb6fa5
      /* Add our custom icon factory to the list of defaults */
Packit Service fb6fa5
      factory = gtk_icon_factory_new ();
Packit Service fb6fa5
      gtk_icon_factory_add_default (factory);
Packit Service fb6fa5
Packit Service fb6fa5
      /* demo_find_file() looks in the current directory first,
Packit Service fb6fa5
       * so you can run gtk-demo without installing GTK, then looks
Packit Service fb6fa5
       * in the location where the file is installed.
Packit Service fb6fa5
       */
Packit Service fb6fa5
      pixbuf = NULL;
Packit Service fb6fa5
      filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
Packit Service fb6fa5
      if (filename)
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
Packit Service fb6fa5
	  g_free (filename);
Packit Service fb6fa5
	}
Packit Service fb6fa5
Packit Service fb6fa5
      /* Register icon to accompany stock item */
Packit Service fb6fa5
      if (pixbuf != NULL)
Packit Service fb6fa5
        {
Packit Service fb6fa5
          GtkIconSet *icon_set;
Packit Service fb6fa5
          GdkPixbuf *transparent;
Packit Service fb6fa5
Packit Service fb6fa5
          /* The gtk-logo-rgb icon has a white background, make it transparent */
Packit Service fb6fa5
          transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);
Packit Service fb6fa5
Packit Service fb6fa5
          icon_set = gtk_icon_set_new_from_pixbuf (transparent);
Packit Service fb6fa5
          gtk_icon_factory_add (factory, "demo-gtk-logo", icon_set);
Packit Service fb6fa5
          gtk_icon_set_unref (icon_set);
Packit Service fb6fa5
          g_object_unref (pixbuf);
Packit Service fb6fa5
          g_object_unref (transparent);
Packit Service fb6fa5
        }
Packit Service fb6fa5
      else
Packit Service fb6fa5
        g_warning ("failed to load GTK logo for toolbar");
Packit Service fb6fa5
Packit Service fb6fa5
      /* Drop our reference to the factory, GTK will hold a reference. */
Packit Service fb6fa5
      g_object_unref (factory);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
update_statusbar (GtkTextBuffer *buffer,
Packit Service fb6fa5
                  GtkStatusbar  *statusbar)
Packit Service fb6fa5
{
Packit Service fb6fa5
  gchar *msg;
Packit Service fb6fa5
  gint row, col;
Packit Service fb6fa5
  gint count;
Packit Service fb6fa5
  GtkTextIter iter;
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_statusbar_pop (statusbar, 0); /* clear any previous message,
Packit Service fb6fa5
				     * underflow is allowed
Packit Service fb6fa5
				     */
Packit Service fb6fa5
Packit Service fb6fa5
  count = gtk_text_buffer_get_char_count (buffer);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_text_buffer_get_iter_at_mark (buffer,
Packit Service fb6fa5
                                    &iter,
Packit Service fb6fa5
                                    gtk_text_buffer_get_insert (buffer));
Packit Service fb6fa5
Packit Service fb6fa5
  row = gtk_text_iter_get_line (&iter);
Packit Service fb6fa5
  col = gtk_text_iter_get_line_offset (&iter);
Packit Service fb6fa5
Packit Service fb6fa5
  msg = g_strdup_printf ("Cursor at row %d column %d - %d chars in document",
Packit Service fb6fa5
                         row, col, count);
Packit Service fb6fa5
Packit Service fb6fa5
  gtk_statusbar_push (statusbar, 0, msg);
Packit Service fb6fa5
Packit Service fb6fa5
  g_free (msg);
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
mark_set_callback (GtkTextBuffer     *buffer,
Packit Service fb6fa5
                   const GtkTextIter *new_location,
Packit Service fb6fa5
                   GtkTextMark       *mark,
Packit Service fb6fa5
                   gpointer           data)
Packit Service fb6fa5
{
Packit Service fb6fa5
  update_statusbar (buffer, GTK_STATUSBAR (data));
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
static void
Packit Service fb6fa5
update_resize_grip (GtkWidget           *widget,
Packit Service fb6fa5
		    GdkEventWindowState *event,
Packit Service fb6fa5
		    GtkStatusbar        *statusbar)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (event->changed_mask & (GDK_WINDOW_STATE_MAXIMIZED |
Packit Service fb6fa5
			     GDK_WINDOW_STATE_FULLSCREEN))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gboolean maximized;
Packit Service fb6fa5
Packit Service fb6fa5
      maximized = event->new_window_state & (GDK_WINDOW_STATE_MAXIMIZED |
Packit Service fb6fa5
					     GDK_WINDOW_STATE_FULLSCREEN);
Packit Service fb6fa5
      gtk_statusbar_set_has_resize_grip (statusbar, !maximized);
Packit Service fb6fa5
    }
Packit Service fb6fa5
}
Packit Service fb6fa5
Packit Service fb6fa5
Packit Service fb6fa5
GtkWidget *
Packit Service fb6fa5
do_appwindow (GtkWidget *do_widget)
Packit Service fb6fa5
{
Packit Service fb6fa5
  if (!window)
Packit Service fb6fa5
    {
Packit Service fb6fa5
      GtkWidget *table;
Packit Service fb6fa5
      GtkWidget *statusbar;
Packit Service fb6fa5
      GtkWidget *contents;
Packit Service fb6fa5
      GtkWidget *sw;
Packit Service fb6fa5
      GtkWidget *bar;
Packit Service fb6fa5
      GtkTextBuffer *buffer;
Packit Service fb6fa5
      GtkActionGroup *action_group;
Packit Service fb6fa5
      GtkAction *open_action;
Packit Service fb6fa5
      GtkUIManager *merge;
Packit Service fb6fa5
      GError *error = NULL;
Packit Service fb6fa5
Packit Service fb6fa5
      register_stock_icons ();
Packit Service fb6fa5
Packit Service fb6fa5
      /* Create the toplevel window
Packit Service fb6fa5
       */
Packit Service fb6fa5
Packit Service fb6fa5
      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
Packit Service fb6fa5
      gtk_window_set_screen (GTK_WINDOW (window),
Packit Service fb6fa5
			     gtk_widget_get_screen (do_widget));
Packit Service fb6fa5
      gtk_window_set_title (GTK_WINDOW (window), "Application Window");
Packit Service fb6fa5
      gtk_window_set_icon_name (GTK_WINDOW (window), "gtk-open");
Packit Service fb6fa5
Packit Service fb6fa5
      /* NULL window variable when window is closed */
Packit Service fb6fa5
      g_signal_connect (window, "destroy",
Packit Service fb6fa5
                        G_CALLBACK (gtk_widget_destroyed),
Packit Service fb6fa5
                        &window);
Packit Service fb6fa5
Packit Service fb6fa5
      table = gtk_table_new (1, 5, FALSE);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_container_add (GTK_CONTAINER (window), table);
Packit Service fb6fa5
Packit Service fb6fa5
      /* Create the menubar and toolbar
Packit Service fb6fa5
       */
Packit Service fb6fa5
Packit Service fb6fa5
      action_group = gtk_action_group_new ("AppWindowActions");
Packit Service fb6fa5
      open_action = g_object_new (tool_menu_action_get_type (),
Packit Service fb6fa5
				  "name", "Open",
Packit Service fb6fa5
				  "label", "_Open",
Packit Service fb6fa5
				  "tooltip", "Open a file",
Packit Service fb6fa5
				  "stock-id", GTK_STOCK_OPEN,
Packit Service fb6fa5
				  NULL);
Packit Service fb6fa5
      gtk_action_group_add_action (action_group, open_action);
Packit Service fb6fa5
      g_object_unref (open_action);
Packit Service fb6fa5
      gtk_action_group_add_actions (action_group,
Packit Service fb6fa5
				    entries, n_entries,
Packit Service fb6fa5
				    window);
Packit Service fb6fa5
      gtk_action_group_add_toggle_actions (action_group,
Packit Service fb6fa5
					   toggle_entries, n_toggle_entries,
Packit Service fb6fa5
					   NULL);
Packit Service fb6fa5
      gtk_action_group_add_radio_actions (action_group,
Packit Service fb6fa5
					  color_entries, n_color_entries,
Packit Service fb6fa5
					  COLOR_RED,
Packit Service fb6fa5
					  G_CALLBACK (activate_radio_action),
Packit Service fb6fa5
					  NULL);
Packit Service fb6fa5
      gtk_action_group_add_radio_actions (action_group,
Packit Service fb6fa5
					  shape_entries, n_shape_entries,
Packit Service fb6fa5
					  SHAPE_SQUARE,
Packit Service fb6fa5
					  G_CALLBACK (activate_radio_action),
Packit Service fb6fa5
					  NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      merge = gtk_ui_manager_new ();
Packit Service fb6fa5
      g_object_set_data_full (G_OBJECT (window), "ui-manager", merge,
Packit Service fb6fa5
			      g_object_unref);
Packit Service fb6fa5
      gtk_ui_manager_insert_action_group (merge, action_group, 0);
Packit Service fb6fa5
      gtk_window_add_accel_group (GTK_WINDOW (window),
Packit Service fb6fa5
				  gtk_ui_manager_get_accel_group (merge));
Packit Service fb6fa5
Packit Service fb6fa5
      if (!gtk_ui_manager_add_ui_from_string (merge, ui_info, -1, &error))
Packit Service fb6fa5
	{
Packit Service fb6fa5
	  g_message ("building menus failed: %s", error->message);
Packit Service fb6fa5
	  g_error_free (error);
Packit Service fb6fa5
	}
Packit Service fb6fa5
Packit Service fb6fa5
      bar = gtk_ui_manager_get_widget (merge, "/MenuBar");
Packit Service fb6fa5
      gtk_widget_show (bar);
Packit Service fb6fa5
      gtk_table_attach (GTK_TABLE (table),
Packit Service fb6fa5
			bar,
Packit Service fb6fa5
                        /* X direction */          /* Y direction */
Packit Service fb6fa5
                        0, 1,                      0, 1,
Packit Service fb6fa5
                        GTK_EXPAND | GTK_FILL,     0,
Packit Service fb6fa5
                        0,                         0);
Packit Service fb6fa5
Packit Service fb6fa5
      bar = gtk_ui_manager_get_widget (merge, "/ToolBar");
Packit Service fb6fa5
      gtk_widget_show (bar);
Packit Service fb6fa5
      gtk_table_attach (GTK_TABLE (table),
Packit Service fb6fa5
			bar,
Packit Service fb6fa5
                        /* X direction */       /* Y direction */
Packit Service fb6fa5
                        0, 1,                   1, 2,
Packit Service fb6fa5
                        GTK_EXPAND | GTK_FILL,  0,
Packit Service fb6fa5
                        0,                      0);
Packit Service fb6fa5
Packit Service fb6fa5
      /* Create document
Packit Service fb6fa5
       */
Packit Service fb6fa5
Packit Service fb6fa5
      infobar = gtk_info_bar_new ();
Packit Service fb6fa5
      gtk_widget_set_no_show_all (infobar, TRUE);
Packit Service fb6fa5
      messagelabel = gtk_label_new ("");
Packit Service fb6fa5
      gtk_widget_show (messagelabel);
Packit Service fb6fa5
      gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar))),
Packit Service fb6fa5
                          messagelabel,
Packit Service fb6fa5
                          TRUE, TRUE, 0);
Packit Service fb6fa5
      gtk_info_bar_add_button (GTK_INFO_BAR (infobar),
Packit Service fb6fa5
                               GTK_STOCK_OK, GTK_RESPONSE_OK);
Packit Service fb6fa5
      g_signal_connect (infobar, "response",
Packit Service fb6fa5
                        G_CALLBACK (gtk_widget_hide), NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_table_attach (GTK_TABLE (table),
Packit Service fb6fa5
                        infobar,
Packit Service fb6fa5
                        /* X direction */       /* Y direction */
Packit Service fb6fa5
                        0, 1,                   2, 3,
Packit Service fb6fa5
                        GTK_EXPAND | GTK_FILL,  0,
Packit Service fb6fa5
                        0,                      0);
Packit Service fb6fa5
Packit Service fb6fa5
      sw = gtk_scrolled_window_new (NULL, NULL);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
Packit Service fb6fa5
                                      GTK_POLICY_AUTOMATIC,
Packit Service fb6fa5
                                      GTK_POLICY_AUTOMATIC);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
Packit Service fb6fa5
                                           GTK_SHADOW_IN);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_table_attach (GTK_TABLE (table),
Packit Service fb6fa5
                        sw,
Packit Service fb6fa5
                        /* X direction */       /* Y direction */
Packit Service fb6fa5
                        0, 1,                   3, 4,
Packit Service fb6fa5
                        GTK_EXPAND | GTK_FILL,  GTK_EXPAND | GTK_FILL,
Packit Service fb6fa5
                        0,                      0);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_window_set_default_size (GTK_WINDOW (window),
Packit Service fb6fa5
                                   200, 200);
Packit Service fb6fa5
Packit Service fb6fa5
      contents = gtk_text_view_new ();
Packit Service fb6fa5
      gtk_widget_grab_focus (contents);
Packit Service fb6fa5
Packit Service fb6fa5
      gtk_container_add (GTK_CONTAINER (sw),
Packit Service fb6fa5
                         contents);
Packit Service fb6fa5
Packit Service fb6fa5
      /* Create statusbar */
Packit Service fb6fa5
Packit Service fb6fa5
      statusbar = gtk_statusbar_new ();
Packit Service fb6fa5
      gtk_table_attach (GTK_TABLE (table),
Packit Service fb6fa5
                        statusbar,
Packit Service fb6fa5
                        /* X direction */       /* Y direction */
Packit Service fb6fa5
                        0, 1,                   4, 5,
Packit Service fb6fa5
                        GTK_EXPAND | GTK_FILL,  0,
Packit Service fb6fa5
                        0,                      0);
Packit Service fb6fa5
Packit Service fb6fa5
      /* Show text widget info in the statusbar */
Packit Service fb6fa5
      buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
Packit Service fb6fa5
      
Packit Service fb6fa5
      g_signal_connect_object (buffer,
Packit Service fb6fa5
                               "changed",
Packit Service fb6fa5
                               G_CALLBACK (update_statusbar),
Packit Service fb6fa5
                               statusbar,
Packit Service fb6fa5
                               0);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect_object (buffer,
Packit Service fb6fa5
                               "mark_set", /* cursor moved */
Packit Service fb6fa5
                               G_CALLBACK (mark_set_callback),
Packit Service fb6fa5
                               statusbar,
Packit Service fb6fa5
                               0);
Packit Service fb6fa5
Packit Service fb6fa5
      g_signal_connect_object (window,
Packit Service fb6fa5
			       "window_state_event",
Packit Service fb6fa5
			       G_CALLBACK (update_resize_grip),
Packit Service fb6fa5
			       statusbar,
Packit Service fb6fa5
			       0);
Packit Service fb6fa5
Packit Service fb6fa5
      update_statusbar (buffer, GTK_STATUSBAR (statusbar));
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  if (!gtk_widget_get_visible (window))
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_show_all (window);
Packit Service fb6fa5
    }
Packit Service fb6fa5
  else
Packit Service fb6fa5
    {
Packit Service fb6fa5
      gtk_widget_destroy (window);
Packit Service fb6fa5
      window = NULL;
Packit Service fb6fa5
      infobar = NULL;
Packit Service fb6fa5
      messagelabel = NULL;
Packit Service fb6fa5
    }
Packit Service fb6fa5
Packit Service fb6fa5
  return window;
Packit Service fb6fa5
}
Packit Service fb6fa5