From b25395fab6fe9ee38bc0cd359941d0a825d88451 Mon Sep 17 00:00:00 2001 From: Denis Gorodnichev Date: Thu, 24 Jul 2014 10:37:41 +0400 Subject: merge metacity(gtk3) changes merge metacity(gtk3) changes fix warnings clean up unused variables replace UNUSED_VARIABLE by G_GNUC_UNUSED --- src/tools/marco-window-demo.c | 452 +++++++++++++++++++++++++++++++++--------- 1 file changed, 359 insertions(+), 93 deletions(-) (limited to 'src/tools/marco-window-demo.c') diff --git a/src/tools/marco-window-demo.c b/src/tools/marco-window-demo.c index 8cfaf952..1585b385 100644 --- a/src/tools/marco-window-demo.c +++ b/src/tools/marco-window-demo.c @@ -29,7 +29,14 @@ #define gtk_hbox_new(X, Y) gtk_box_new (GTK_ORIENTATION_HORIZONTAL, Y) #endif +#if GTK_CHECK_VERSION (3, 0, 0) +static void +do_appwindow (GSimpleAction *action, + GVariant *parameter, + gpointer user_data); +#else static GtkWidget* do_appwindow (void); +#endif static gboolean aspect_on; @@ -223,7 +230,11 @@ main (int argc, char **argv) g_error_free (err); } +#if GTK_CHECK_VERSION (3, 0, 0) + do_appwindow (NULL, NULL, NULL); +#else do_appwindow (); +#endif gtk_main (); @@ -289,18 +300,32 @@ response_cb (GtkDialog *dialog, } } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +dialog_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void dialog_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { make_dialog (GTK_WIDGET (callback_data), 1); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +modal_dialog_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void modal_dialog_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *dialog; @@ -317,18 +342,32 @@ modal_dialog_cb (gpointer callback_data, gtk_widget_destroy (dialog); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +no_parent_dialog_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void no_parent_dialog_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { make_dialog (NULL, 1); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +utility_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void utility_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *vbox; @@ -359,10 +398,17 @@ utility_cb (gpointer callback_data, gtk_widget_show_all (window); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +toolbar_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void toolbar_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *vbox; @@ -384,10 +430,17 @@ toolbar_cb (gpointer callback_data, gtk_widget_show_all (window); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +menu_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void menu_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *vbox; @@ -409,10 +462,17 @@ menu_cb (gpointer callback_data, gtk_widget_show_all (window); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +override_redirect_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void override_redirect_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *vbox; @@ -431,10 +491,17 @@ override_redirect_cb (gpointer callback_data, gtk_widget_show_all (window); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +border_only_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void border_only_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *vbox; @@ -501,10 +568,17 @@ focus_label (GtkWidget *window) return label; } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +splashscreen_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void splashscreen_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *image; @@ -610,11 +684,37 @@ make_dock (int type) gtk_widget_show_all (window); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +dock_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void dock_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { +#if GTK_CHECK_VERSION (3, 0, 0) + guint callback_action; + const gchar *name; + + g_object_get (G_OBJECT (action), "name", &name, NULL); + + if (!g_strcmp0 (name, "top-dock")) + callback_action = DOCK_TOP; + else if (!g_strcmp0 (name, "bottom-dock")) + callback_action = DOCK_BOTTOM; + else if (!g_strcmp0 (name, "left-dock")) + callback_action = DOCK_LEFT; + else if (!g_strcmp0 (name, "right-dock")) + callback_action = DOCK_RIGHT; + else if (!g_strcmp0 (name, "all-docks")) + callback_action = DOCK_ALL; + else + return; +#endif if (callback_action == DOCK_ALL) { make_dock (DOCK_TOP); @@ -628,33 +728,25 @@ dock_cb (gpointer callback_data, } } -#if GTK_CHECK_VERSION(3, 0, 0) - -static void top_dock_cb() - { make_dock(DOCK_TOP); } - -static void bottom_dock_cb() - { make_dock(DOCK_BOTTOM); } - -static void left_dock_cb() - { make_dock(DOCK_LEFT); } - -static void right_dock_cb() - { make_dock(DOCK_RIGHT); } - -static void all_dock_cb() - { dock_cb(NULL, DOCK_ALL, NULL); } - -#endif - +#if GTK_CHECK_VERSION (3, 0, 0) +static void +desktop_cb (GSimpleAction *action, + GVariant *parameter, + gpointer callback_data) +#else static void desktop_cb (gpointer callback_data, guint callback_action, GtkWidget *widget) +#endif { GtkWidget *window; GtkWidget *label; +#if GTK_CHECK_VERSION (3, 0, 0) + GdkRGBA desktop_color; +#else GdkColor desktop_color; +#endif window = gtk_window_new (GTK_WINDOW_TOPLEVEL); set_gtk_window_type (GTK_WINDOW (window), "_NET_WM_WINDOW_TYPE_DESKTOP"); @@ -663,11 +755,20 @@ desktop_cb (gpointer callback_data, gdk_screen_width (), gdk_screen_height ()); gtk_window_move (GTK_WINDOW (window), 0, 0); +#if GTK_CHECK_VERSION (3, 0, 0) + desktop_color.red = 0.32; + desktop_color.green = 0.46; + desktop_color.blue = 0.65; + desktop_color.alpha = 1.0; + + gtk_widget_override_background_color (window, 0, &desktop_color); +#else desktop_color.red = 0x5144; desktop_color.green = 0x75D6; desktop_color.blue = 0xA699; gtk_widget_modify_bg (window, GTK_STATE_NORMAL, &desktop_color); +#endif label = focus_label (window); @@ -676,62 +777,7 @@ desktop_cb (gpointer callback_data, gtk_widget_show_all (window); } -#if GTK_CHECK_VERSION(3, 0, 0) - -static gchar ui_definition[] = -"\ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ -"; - -static GtkActionEntry entries[] = -{ - /* - struct GtkActionEntry { - const gchar *name; - const gchar *stock_id; - const gchar *label; - const gchar *accelerator; - const gchar *tooltip; - GCallback callback; - }; */ - - {"DialogAction" , NULL , "_Dialog" , "d" , NULL , G_CALLBACK(dialog_cb)} , - {"ModalDialogAction" , NULL , "_Modal dialog" , NULL , NULL , G_CALLBACK(modal_dialog_cb)} , - {"ParentlessDialogAction" , NULL , "_Parentless dialog" , NULL , NULL , G_CALLBACK(no_parent_dialog_cb)} , - {"UtilityAction" , NULL , "_Utility" , "u" , NULL , G_CALLBACK(utility_cb)} , - {"SplashscreenAction" , NULL , "_Splashscreen" , "s" , NULL , G_CALLBACK(splashscreen_cb)} , - {"TopDockAction" , NULL , "_Top dock" , NULL , NULL , G_CALLBACK(top_dock_cb)} , - {"BottomDockAction" , NULL , "_Bottom dock" , NULL , NULL , G_CALLBACK(bottom_dock_cb)} , - {"LeftDockAction" , NULL , "_Left dock" , NULL , NULL , G_CALLBACK(left_dock_cb)} , - {"RightDockAction" , NULL , "_Right dock" , NULL , NULL , G_CALLBACK(right_dock_cb)} , - {"AllDocksAction" , NULL , "_All docks" , NULL , NULL , G_CALLBACK(all_dock_cb)} , - {"DesktopAction" , NULL , "Des_ktop" , NULL , NULL , G_CALLBACK(desktop_cb)} , - {"MenuAction" , NULL , "Me_nu" , NULL , NULL , G_CALLBACK(menu_cb)} , - {"ToolbarAction" , NULL , "Tool_bar" , NULL , NULL , G_CALLBACK(toolbar_cb)} , - {"OverrideRedirectAction" , NULL , "Override Redirect" , NULL , NULL , G_CALLBACK(override_redirect_cb)} , - {"BorderOnly" , NULL , "Border Only" , NULL , NULL , G_CALLBACK(border_only_cb)} , -}; - -#else - +#if !GTK_CHECK_VERSION(3, 0, 0) static GtkItemFactoryEntry menu_items[] = { { "/_Windows", NULL, NULL, 0, "" }, @@ -755,16 +801,30 @@ static GtkItemFactoryEntry menu_items[] = #endif +#if GTK_CHECK_VERSION (3, 0, 0) +static void +sleep_cb (GSimpleAction *action, + GVariant *parameter, + gpointer data) +#else static void sleep_cb (GtkWidget *button, gpointer data) +#endif { sleep (1000); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +toggle_aspect_ratio (GSimpleAction *action, + GVariant *parameter, + gpointer data) +#else static void toggle_aspect_ratio (GtkWidget *button, gpointer data) +#endif { GtkWidget *window; GdkGeometry geom; @@ -782,7 +842,11 @@ toggle_aspect_ratio (GtkWidget *button, aspect_on = !aspect_on; +#if GTK_CHECK_VERSION(3, 0, 0) + window = gtk_widget_get_ancestor (GTK_WIDGET(data), GTK_TYPE_WINDOW); +#else window = gtk_widget_get_ancestor (button, GTK_TYPE_WINDOW); +#endif if (window) gtk_window_set_geometry_hints (GTK_WINDOW (window), GTK_WIDGET (data), @@ -791,20 +855,38 @@ toggle_aspect_ratio (GtkWidget *button, } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +toggle_decorated_cb (GSimpleAction *action, + GVariant *parameter, + gpointer data) +#else static void toggle_decorated_cb (GtkWidget *button, gpointer data) +#endif { GtkWidget *window; +#if GTK_CHECK_VERSION (3, 0, 0) + window = gtk_widget_get_ancestor (data, GTK_TYPE_WINDOW); +#else window = gtk_widget_get_ancestor (button, GTK_TYPE_WINDOW); +#endif if (window) gtk_window_set_decorated (GTK_WINDOW (window), !gtk_window_get_decorated (GTK_WINDOW (window))); } +#if GTK_CHECK_VERSION (3, 0, 0) +static void +clicked_toolbar_cb (GSimpleAction *action, + GVariant *parameter, + gpointer data) +#else static void clicked_toolbar_cb (GtkWidget *button, gpointer data) +#endif { GtkWidget *dialog; @@ -870,21 +952,172 @@ destroy_cb (GtkWidget *w, gpointer data) gtk_main_quit (); } +#if GTK_CHECK_VERSION (3, 0, 0) +static const gchar *xml = + "" + "" + "" + "Windows" + "
" + "" + "Dialog" + "demo.dialog1" + "<control>d" + "" + "" + "Modal dialog" + "demo.dialog2" + "" + "" + "Parentless dialog" + "demo.dialog3" + "" + "" + "Utility" + "demo.utility" + "<control>u" + "" + "" + "Splashscreen" + "demo.splashscreen" + "<control>s" + "" + "" + "Top dock" + "demo.top-dock" + "" + "" + "Bottom dock" + "demo.bottom-dock" + "" + "" + "Left dock" + "demo.left-dock" + "" + "" + "Right dock" + "demo.right-dock" + "" + "" + "All docks" + "demo.all-docks" + "" + "" + "Desktop" + "demo.desktop" + "" + "" + "Menu" + "demo.menu" + "" + "" + "Toolbar" + "demo.toolbar" + "" + "" + "Override Redirect" + "demo.override-redirect" + "" + "" + "Border Only" + "demo.border-only" + "" + "
" + "
" + "
" + "
"; + +static GActionEntry demo_entries[] = +{ + /* menubar */ + { "dialog1", dialog_cb, NULL, NULL, NULL, {} }, + { "dialog2", modal_dialog_cb, NULL, NULL, NULL, {} }, + { "dialog3", no_parent_dialog_cb, NULL, NULL, NULL, {} }, + { "utility", utility_cb, NULL, NULL, NULL, {} }, + { "splashscreen", splashscreen_cb, NULL, NULL, NULL, {} }, + { "top-dock", dock_cb, NULL, NULL, NULL, {} }, + { "bottom-dock", dock_cb, NULL, NULL, NULL, {} }, + { "left-dock", dock_cb, NULL, NULL, NULL, {} }, + { "right-dock", dock_cb, NULL, NULL, NULL, {} }, + { "all-docks", dock_cb, NULL, NULL, NULL, {} }, + { "desktop", desktop_cb, NULL, NULL, NULL, {} }, + { "menu", menu_cb, NULL, NULL, NULL, {} }, + { "toolbar", toolbar_cb, NULL, NULL, NULL, {} }, + { "override-redirect", override_redirect_cb, NULL, NULL, NULL, {} }, + { "border-only", border_only_cb, NULL, NULL, NULL, {} }, + /* toolbar */ + { "new", do_appwindow, NULL, NULL, NULL, {} }, + { "lock", sleep_cb, NULL, NULL, NULL, {} }, + { "decorations", toggle_decorated_cb, NULL, NULL, NULL, {} }, + { "quit", clicked_toolbar_cb, NULL, NULL, NULL, {} }, + { "ratio", toggle_aspect_ratio, NULL, NULL, NULL, {} }, +}; + +static GtkWidget * +create_toolbar (void) +{ + GtkWidget *toolbar; + GtkToolItem *item; + + toolbar = gtk_toolbar_new (); + + item = gtk_tool_button_new (gtk_image_new_from_icon_name ("document-new", GTK_ICON_SIZE_SMALL_TOOLBAR), NULL); + gtk_tool_item_set_tooltip_markup (item, "Open another one of these windows"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (item), "demo.new"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + item = gtk_tool_button_new (gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_SMALL_TOOLBAR), NULL); + gtk_tool_item_set_tooltip_markup (item, "This is a demo button that locks up the demo"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (item), "demo.lock"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + item = gtk_tool_button_new (gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_SMALL_TOOLBAR), NULL); + gtk_tool_item_set_tooltip_markup (item, "This is a demo button that toggles window decorations"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (item), "demo.decorations"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + item = gtk_tool_button_new (gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_SMALL_TOOLBAR), NULL); + gtk_tool_item_set_tooltip_markup (item, "This is a demo button that locks the aspect ratio using a hint"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (item), "demo.ratio"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + item = gtk_tool_button_new (gtk_image_new_from_icon_name ("gtk-quit", GTK_ICON_SIZE_SMALL_TOOLBAR), NULL); + gtk_tool_item_set_tooltip_markup (item, "This is a demo button with a 'quit' icon"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (item), "demo.quit"); + gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); + + return toolbar; +} +#endif + +#if GTK_CHECK_VERSION (3, 0, 0) +static void +do_appwindow (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +#else static GtkWidget * do_appwindow (void) +#endif { GtkWidget *window; +#if GTK_CHECK_VERSION (3, 0, 0) + GtkWidget *grid; +#else GtkWidget *table; +#endif GtkWidget *toolbar; +#if !GTK_CHECK_VERSION (3, 0, 0) GtkWidget *handlebox; +#endif GtkWidget *statusbar; GtkWidget *contents; GtkWidget *sw; GtkTextBuffer *buffer; #if GTK_CHECK_VERSION(3, 0, 0) - GtkActionGroup *action_group; - GtkUIManager *ui_manager; + GSimpleActionGroup *action_group; + GtkBuilder *builder; #else GtkAccelGroup *accel_group; GtkItemFactory *item_factory; @@ -904,29 +1137,44 @@ do_appwindow (void) g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); +#if GTK_CHECK_VERSION (3, 0, 0) + grid = gtk_grid_new (); + + gtk_widget_set_vexpand (grid, TRUE); + gtk_widget_set_hexpand (grid, TRUE); + + gtk_container_add (GTK_CONTAINER (window), grid); +#else table = gtk_table_new (1, 4, FALSE); gtk_container_add (GTK_CONTAINER (window), table); +#endif - #if GTK_CHECK_VERSION(3, 0, 0) +#if GTK_CHECK_VERSION(3, 0, 0) + action_group = g_simple_action_group_new (); + builder = gtk_builder_new_from_string (xml, -1); - action_group = gtk_action_group_new("ActionGroups"); - gtk_action_group_add_actions(action_group, entries, G_N_ELEMENTS(entries), NULL); + 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)); - ui_manager = gtk_ui_manager_new(); - gtk_ui_manager_insert_action_group(ui_manager, action_group, 0); - gtk_ui_manager_add_ui_from_string(ui_manager, ui_definition, -1, NULL); + /* Create the menubar + */ - gtk_table_attach (GTK_TABLE (table), - gtk_ui_manager_get_widget (ui_manager, "/MainMenuBar"), - /* X direction */ /* Y direction */ - 0, 1, 0, 1, - GTK_EXPAND | GTK_FILL, 0, - 0, 0); + GMenuModel *model = G_MENU_MODEL (gtk_builder_get_object (builder, "menubar")); + GtkWidget *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); - gtk_window_add_accel_group (GTK_WINDOW (window), gtk_ui_manager_get_accel_group (ui_manager)); + /* Create the toolbar + */ - #else + toolbar = create_toolbar (); + gtk_grid_attach (GTK_GRID (grid), toolbar, 0, 1, 1, 1); + gtk_widget_set_hexpand (toolbar, TRUE); +#else /* Create the menubar */ @@ -958,7 +1206,7 @@ do_appwindow (void) 0, 0); - #endif +#endif /* Create document */ @@ -972,12 +1220,19 @@ do_appwindow (void) gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_IN); +#if GTK_CHECK_VERSION (3, 0, 0) + gtk_grid_attach (GTK_GRID (grid), sw, 0, 2, 1, 1); + + gtk_widget_set_hexpand (sw, TRUE); + gtk_widget_set_vexpand (sw, TRUE); +#else gtk_table_attach (GTK_TABLE (table), sw, /* X direction */ /* Y direction */ 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); +#endif gtk_window_set_default_size (GTK_WINDOW (window), 200, 200); @@ -989,6 +1244,7 @@ do_appwindow (void) gtk_container_add (GTK_CONTAINER (sw), contents); +#if !GTK_CHECK_VERSION (3, 0, 0) /* Create the toolbar */ toolbar = gtk_toolbar_new (); @@ -1060,16 +1316,21 @@ do_appwindow (void) 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); - +#endif /* Create statusbar */ statusbar = gtk_statusbar_new (); +#if GTK_CHECK_VERSION (3, 0, 0) + gtk_grid_attach (GTK_GRID (grid), statusbar, 0, 3, 1, 1); + gtk_widget_set_hexpand (statusbar, TRUE); +#else gtk_table_attach (GTK_TABLE (table), statusbar, /* X direction */ /* Y direction */ 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0); +#endif /* Show text widget info in the statusbar */ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents)); @@ -1097,7 +1358,12 @@ do_appwindow (void) gtk_widget_show_all (window); +#if GTK_CHECK_VERSION (3, 0, 0) + g_object_unref (action_group); + g_object_unref (builder); +#else return window; +#endif } -- cgit v1.2.1