static void browser_create (void) { MidoriApp* app; MidoriBrowser* browser; GtkActionGroup* action_group; GList* actions; app = midori_app_new (); browser = midori_app_create_browser (app); gtk_widget_destroy (GTK_WIDGET (browser)); app = midori_app_new (); browser = midori_app_create_browser (app); action_group = midori_browser_get_action_group (browser); actions = gtk_action_group_list_actions (action_group); while (actions) { GtkAction* action = actions->data; if (g_strcmp0 (gtk_action_get_name (action), "WindowClose")) if (g_strcmp0 (gtk_action_get_name (action), "EncodingCustom")) if (g_strcmp0 (gtk_action_get_name (action), "AddSpeedDial")) gtk_action_activate (action); actions = g_list_next (actions); } g_list_free (actions); gtk_widget_destroy (GTK_WIDGET (browser)); g_object_unref (app); }
static void formhistory_deactivate_cb (MidoriExtension* extension, MidoriBrowser* browser) { MidoriApp* app = midori_extension_get_app (extension); FormHistoryPriv* priv = g_object_get_data (G_OBJECT (extension), "priv"); GtkActionGroup* action_group = midori_browser_get_action_group (browser); GtkAction* action; g_signal_handlers_disconnect_by_func ( browser, formhistory_add_tab_cb, extension); g_signal_handlers_disconnect_by_func ( extension, formhistory_deactivate_cb, browser); g_signal_handlers_disconnect_by_func ( app, formhistory_app_add_browser_cb, extension); GList* tabs = midori_browser_get_tabs (browser); for (; tabs; tabs = g_list_next (tabs)) formhistory_deactivate_tab (tabs->data, extension); g_list_free (tabs); g_object_set_data (G_OBJECT (browser), "FormHistoryExtension", NULL); action = gtk_action_group_get_action (action_group, "FormHistoryToggleState"); if (action != NULL) { gtk_action_group_remove_action (action_group, action); g_object_unref (action); } formhistory_private_destroy (priv); }
static void formhistory_app_add_browser_cb (MidoriApp* app, MidoriBrowser* browser, MidoriExtension* extension) { GtkAccelGroup* acg = gtk_accel_group_new (); GtkActionGroup* action_group = midori_browser_get_action_group (browser); GtkAction* action = gtk_action_new ("FormHistoryToggleState", _("Toggle form history state"), _("Activate or deactivate form history for the current tab."), NULL); gtk_window_add_accel_group (GTK_WINDOW (browser), acg); g_object_set_data (G_OBJECT (browser), "FormHistoryExtension", extension); g_signal_connect (action, "activate", G_CALLBACK (formhistory_toggle_state_cb), browser); gtk_action_group_add_action_with_accel (action_group, action, "<Ctrl><Shift>F"); gtk_action_set_accel_group (action, acg); gtk_action_connect_accelerator (action); if (midori_extension_get_boolean (extension, "always-load")) { GList* tabs = midori_browser_get_tabs (browser); for (; tabs; tabs = g_list_next (tabs)) formhistory_add_tab_cb (browser, tabs->data, extension); g_list_free (tabs); g_signal_connect (browser, "add-tab", G_CALLBACK (formhistory_add_tab_cb), extension); } g_signal_connect (extension, "deactivate", G_CALLBACK (formhistory_deactivate_cb), browser); }
static void tb_editor_menu_configure_toolbar_activate_cb(GtkWidget *menuitem, MidoriBrowser *browser) { GSList *node, *used_items, *all_items; GtkTreeIter iter; GtkTreePath *path; TBEditorWidget *tbw; /* read the current active toolbar items */ used_items = tb_editor_parse_active_items(browser); /* get all available actions */ all_items = tb_editor_get_available_actions(browser); /* create the GUI */ tbw = tb_editor_create_dialog(browser); /* cache some pointers, this is safe enough since the dialog is run modally */ tbw->action_group = midori_browser_get_action_group(browser); tbw->browser = browser; /* fill the stores */ for (node = all_items; node != NULL; node = node->next) { if (strcmp(node->data, "Separator") == 0 || g_slist_find_custom(used_items, node->data, (GCompareFunc) strcmp) == NULL) { gtk_list_store_append(tbw->store_available, &iter); tb_editor_set_item_values(tbw, node->data, tbw->store_available, &iter); } } for (node = used_items; node != NULL; node = node->next) { gtk_list_store_append(tbw->store_used, &iter); tb_editor_set_item_values(tbw, node->data, tbw->store_used, &iter); } /* select first item */ path = gtk_tree_path_new_from_string("0"); gtk_tree_selection_select_path(gtk_tree_view_get_selection(tbw->tree_used), path); gtk_tree_path_free(path); /* connect the changed signals after populating the store */ g_signal_connect(tbw->store_used, "row-changed", G_CALLBACK(tb_editor_available_items_changed_cb), tbw); g_signal_connect(tbw->store_used, "row-deleted", G_CALLBACK(tb_editor_available_items_deleted_cb), tbw); /* run it */ gtk_dialog_run(GTK_DIALOG(tbw->dialog)); gtk_widget_destroy(tbw->dialog); g_slist_foreach(used_items, (GFunc) g_free, NULL); g_slist_foreach(all_items, (GFunc) g_free, NULL); g_slist_free(used_items); g_slist_free(all_items); tb_editor_free_path(tbw); g_free(tbw); }
static void browser_tooltips (void) { MidoriBrowser* browser; GtkActionGroup* action_group; GList* actions; gchar* toolbar; guint errors = 0; browser = midori_browser_new (); action_group = midori_browser_get_action_group (browser); actions = gtk_action_group_list_actions (action_group); toolbar = g_strjoinv (" ", (gchar**)midori_browser_get_toolbar_actions (browser)); while (actions) { GtkAction* action = actions->data; const gchar* name = gtk_action_get_name (action); if (strstr ("CompactMenu Location Separator", name)) { actions = g_list_next (actions); continue; } if (strstr (toolbar, name) != NULL) { if (!gtk_action_get_tooltip (action)) { printf ("'%s' can be toolbar item but tooltip is unset\n", name); errors++; } } else { if (gtk_action_get_tooltip (action)) { printf ("'%s' is no toolbar item but tooltip is set\n", name); errors++; } } actions = g_list_next (actions); } g_free (toolbar); g_list_free (actions); gtk_widget_destroy (GTK_WIDGET (browser)); if (errors) g_error ("Tooltip errors"); }
static GtkWidget* shortcuts_get_preferences_dialog (MidoriExtension* extension) { MidoriApp* app; GtkWidget* browser; const gchar* dialog_title; GtkWidget* dialog; gint width, height; GtkWidget* xfce_heading; GtkWidget* hbox; GtkListStore* liststore; GtkTreeModel* model; GtkWidget* treeview; GtkTreeViewColumn* column; GtkCellRenderer* renderer; GtkWidget* scrolled; GtkActionGroup* action_group; GList* actions; guint i; GtkAction* action; #if HAVE_OSX GtkWidget* icon; #endif app = midori_extension_get_app (extension); browser = katze_object_get_object (app, "browser"); dialog_title = _("Customize Keyboard shortcuts"); dialog = gtk_dialog_new_with_buttons (dialog_title, GTK_WINDOW (browser), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, #if !HAVE_OSX GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, #endif NULL); g_signal_connect (dialog, "destroy", G_CALLBACK (gtk_widget_destroyed), &dialog); gtk_window_set_icon_name (GTK_WINDOW (dialog), GTK_STOCK_PROPERTIES); sokoke_widget_get_text_size (dialog, "M", &width, &height); gtk_window_set_default_size (GTK_WINDOW (dialog), width * 52, height * 24); g_signal_connect (dialog, "response", G_CALLBACK (shortcuts_preferences_response_cb), NULL); if ((xfce_heading = sokoke_xfce_header_new ( gtk_window_get_icon_name (GTK_WINDOW (dialog)), dialog_title))) gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), xfce_heading, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 12); liststore = gtk_list_store_new (7, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, GTK_TYPE_ACTION); model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (liststore)); treeview = gtk_tree_view_new_with_model (model); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE); column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (column, renderer, FALSE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "text", 0); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); column = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_accel_new (); gtk_tree_view_column_pack_start (column, renderer, TRUE); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "accel-key", 1); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "accel-mods", 2); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "accel-mode", 3); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "sensitive", 4); gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (column), renderer, "editable", 4); g_signal_connect (renderer, "accel-edited", G_CALLBACK (shortcuts_accel_edited_cb), model); g_signal_connect (renderer, "accel-cleared", G_CALLBACK (shortcuts_accel_cleared_cb), model); gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_container_add (GTK_CONTAINER (scrolled), treeview); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (hbox), scrolled, TRUE, TRUE, 5); action_group = midori_browser_get_action_group (MIDORI_BROWSER (browser)); actions = gtk_action_group_list_actions (action_group); i = 0; /* FIXME: Catch added and removed actions */ while ((action = g_list_nth_data (actions, i++))) { gchar* label = shortcuts_label_for_action (action); GtkAccelKey key; gboolean has_hotkey = shortcuts_hotkey_for_action (action, &key); gtk_list_store_insert_with_values (GTK_LIST_STORE (liststore), NULL, G_MAXINT, 0, label, 1, key.accel_key, 2, key.accel_mods, 3, GTK_CELL_RENDERER_ACCEL_MODE_OTHER, 4, has_hotkey, 6, action, -1); g_free (label); } g_list_free (actions); g_object_unref (liststore); gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0, GTK_SORT_ASCENDING); g_object_unref (model); gtk_widget_show_all (GTK_DIALOG (dialog)->vbox); g_object_unref (browser); return dialog; }
MidoriBrowser* midori_web_app_new (const gchar* webapp, gchar** open_uris, gchar** execute_commands, gint inactivity_reset, const gchar* block_uris) { guint i; g_return_val_if_fail (webapp != NULL, NULL); midori_paths_init (MIDORI_RUNTIME_MODE_APP, webapp); /* Set sanitized URI as class name which .desktop files use as StartupWMClass So dock type launchers can distinguish different apps with the same executable */ gchar* wm_class = g_strdelimit (g_strdup (webapp), ":.\\/", '_'); gdk_set_program_class (wm_class); g_free (wm_class); MidoriBrowser* browser = midori_browser_new (); g_signal_connect (browser, "new-window", G_CALLBACK (midori_frontend_browser_new_window_cb), NULL); g_signal_connect (browser, "show-preferences", G_CALLBACK (midori_browser_privacy_preferences_cb), NULL); midori_browser_set_action_visible (browser, "Menubar", FALSE); midori_browser_set_action_visible (browser, "CompactMenu", FALSE); midori_browser_set_action_visible (browser, "AddSpeedDial", FALSE); midori_browser_set_action_visible (browser, "Navigationbar", FALSE); GtkActionGroup* action_group = midori_browser_get_action_group (browser); GtkAction* action = gtk_action_group_get_action (action_group, "Location"); gtk_action_set_sensitive (action, FALSE); MidoriWebSettings* settings = midori_settings_new_full (NULL); g_object_set (settings, "show-menubar", FALSE, "toolbar-items", "Back,Forward,ReloadStop,Location,Homepage,Preferences", "show-statusbar", FALSE, "show-panel", FALSE, "last-window-state", MIDORI_WINDOW_NORMAL, "inactivity-reset", inactivity_reset, "block-uris", block_uris, NULL); midori_load_soup_session_full (settings); KatzeArray* search_engines = midori_search_engines_new_from_folder (NULL); g_object_set (browser, "show-tabs", open_uris != NULL, "settings", settings, NULL); midori_browser_set_action_visible (browser, "Panel", FALSE); g_object_unref (search_engines); if (webapp != NULL) { gchar* tmp_uri = sokoke_magic_uri (webapp, FALSE, TRUE); g_object_set (settings, "homepage", tmp_uri, NULL); midori_browser_add_uri (browser, tmp_uri); g_free (tmp_uri); } for (i = 0; open_uris && open_uris[i]; i++) { gchar* new_uri = sokoke_magic_uri (open_uris[i], FALSE, TRUE); midori_browser_add_uri (browser, new_uri); g_free (new_uri); } if (midori_browser_get_n_pages (browser) == 0) midori_browser_add_uri (browser, "about:blank"); gtk_widget_show (GTK_WIDGET (browser)); for (i = 0; execute_commands && execute_commands[i]; i++) { midori_browser_assert_action (browser, execute_commands[i]); midori_browser_activate_action (browser, execute_commands[i]); } midori_session_persistent_settings (settings, NULL); /* FIXME need proper stock extension mechanism */ midori_browser_activate_action (browser, "libtransfers." G_MODULE_SUFFIX "=true"); midori_browser_activate_action (browser, "libabout." G_MODULE_SUFFIX "=true"); midori_browser_activate_action (browser, "libopen-with." G_MODULE_SUFFIX "=true"); g_assert (g_module_error () == NULL); return browser; }