static void gedit_app_dispose (GObject *object) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (GEDIT_APP (object)); g_clear_object (&priv->ui_settings); g_clear_object (&priv->window_settings); g_clear_object (&priv->settings); g_clear_object (&priv->page_setup); g_clear_object (&priv->print_settings); /* Note that unreffing the extensions will automatically remove * all extensions which in turn will deactivate the extension */ g_clear_object (&priv->extensions); g_clear_object (&priv->engine); if (priv->theme_provider != NULL) { gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), GTK_STYLE_PROVIDER (priv->theme_provider)); g_clear_object (&priv->theme_provider); } g_clear_object (&priv->window_menu); g_clear_object (&priv->notebook_menu); g_clear_object (&priv->tab_width_menu); g_clear_object (&priv->line_col_menu); G_OBJECT_CLASS (gedit_app_parent_class)->dispose (object); }
static void theme_changed (GtkSettings *settings, GParamSpec *pspec, GeditApp *app) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (app); gchar *theme, *lc_theme, *theme_css; g_object_get (settings, "gtk-theme-name", &theme, NULL); lc_theme = g_ascii_strdown (theme, -1); g_free (theme); theme_css = g_strdup_printf ("gedit.%s.css", lc_theme); g_free (lc_theme); if (priv->theme_provider != NULL) { gtk_style_context_remove_provider_for_screen (gdk_screen_get_default (), GTK_STYLE_PROVIDER (priv->theme_provider)); g_clear_object (&priv->theme_provider); } priv->theme_provider = load_css_from_resource (theme_css, FALSE); g_free (theme_css); }
static void load_print_settings (GeditApp *app) { GeditAppPrivate *priv; gchar *filename; GError *error = NULL; priv = gedit_app_get_instance_private (app); g_return_if_fail (priv->print_settings == NULL); filename = get_print_settings_file (); priv->print_settings = gtk_print_settings_new_from_file (filename, &error); if (error) { /* Ignore file not found error */ if (error->domain != G_FILE_ERROR || error->code != G_FILE_ERROR_NOENT) { g_warning ("%s", error->message); } g_error_free (error); } g_free (filename); /* fall back to default settings */ if (priv->print_settings == NULL) { priv->print_settings = gtk_print_settings_new (); } }
static void save_print_settings (GeditApp *app) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (app); if (priv->print_settings != NULL) { gchar *filename; GError *error = NULL; filename = get_print_settings_file (); gtk_print_settings_to_file (priv->print_settings, filename, &error); if (error) { g_warning ("%s", error->message); g_error_free (error); } g_free (filename); } }
GeditMenuExtension * _gedit_app_extend_menu (GeditApp *app, const gchar *extension_point) { GeditAppPrivate *priv; GMenuModel *model; GMenuModel *section; g_return_val_if_fail (GEDIT_IS_APP (app), NULL); g_return_val_if_fail (extension_point != NULL, NULL); priv = gedit_app_get_instance_private (app); /* First look in the window menu */ section = find_extension_point_section (priv->window_menu, extension_point); /* otherwise look in the app menu */ if (section == NULL) { model = gtk_application_get_app_menu (GTK_APPLICATION (app)); if (model != NULL) { section = find_extension_point_section (model, extension_point); } } return section != NULL ? gedit_menu_extension_new (G_MENU (section)) : NULL; }
GMenuModel * _gedit_app_get_line_col_menu (GeditApp *app) { GeditAppPrivate *priv; g_return_val_if_fail (GEDIT_IS_APP (app), NULL); priv = gedit_app_get_instance_private (app); return priv->line_col_menu; }
/** * gedit_app_get_lockdown: * @app: a #GeditApp * * Gets the lockdown mask (see #GeditLockdownMask) for the application. * The lockdown mask determines which functions are locked down using * the GNOME-wise lockdown GConf keys. **/ GeditLockdownMask gedit_app_get_lockdown (GeditApp *app) { GeditAppPrivate *priv; g_return_val_if_fail (GEDIT_IS_APP (app), GEDIT_LOCKDOWN_ALL); priv = gedit_app_get_instance_private (app); return priv->lockdown; }
/** * gedit_app_create_window: * @app: the #GeditApp * @screen: (allow-none): * * Create a new #GeditWindow part of @app. * * Return value: (transfer none): the new #GeditWindow */ GeditWindow * gedit_app_create_window (GeditApp *app, GdkScreen *screen) { GeditAppPrivate *priv; GeditWindow *window; gchar *role; GdkWindowState state; gint w, h; gedit_debug (DEBUG_APP); priv = gedit_app_get_instance_private (app); window = GEDIT_APP_GET_CLASS (app)->create_window (app); if (screen != NULL) { gtk_window_set_screen (GTK_WINDOW (window), screen); } role = gen_role (); gtk_window_set_role (GTK_WINDOW (window), role); g_free (role); state = g_settings_get_int (priv->window_settings, GEDIT_SETTINGS_WINDOW_STATE); g_settings_get (priv->window_settings, GEDIT_SETTINGS_WINDOW_SIZE, "(ii)", &w, &h); gtk_window_set_default_size (GTK_WINDOW (window), w, h); if ((state & GDK_WINDOW_STATE_MAXIMIZED) != 0) { gtk_window_maximize (GTK_WINDOW (window)); } else { gtk_window_unmaximize (GTK_WINDOW (window)); } if ((state & GDK_WINDOW_STATE_STICKY ) != 0) { gtk_window_stick (GTK_WINDOW (window)); } else { gtk_window_unstick (GTK_WINDOW (window)); } return window; }
GObject * _gedit_app_get_settings (GeditApp *app) { GeditAppPrivate *priv; g_return_val_if_fail (GEDIT_IS_APP (app), NULL); priv = gedit_app_get_instance_private (app); return priv->settings; }
void _gedit_app_set_default_page_setup (GeditApp *app, GtkPageSetup *page_setup) { GeditAppPrivate *priv; g_return_if_fail (GEDIT_IS_APP (app)); g_return_if_fail (GTK_IS_PAGE_SETUP (page_setup)); priv = gedit_app_get_instance_private (app); g_set_object (&priv->page_setup, page_setup); }
void _gedit_app_set_lockdown (GeditApp *app, GeditLockdownMask lockdown) { GeditAppPrivate *priv; g_return_if_fail (GEDIT_IS_APP (app)); priv = gedit_app_get_instance_private (app); priv->lockdown = lockdown; app_lockdown_changed (app); }
static void set_command_line_wait (GeditApp *app, GeditTab *tab) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (app); g_object_set_data_full (G_OBJECT (tab), "GeditTabCommandLineWait", g_object_ref (priv->command_line), (GDestroyNotify)g_object_unref); }
/* Returns a copy */ GtkPrintSettings * _gedit_app_get_default_print_settings (GeditApp *app) { GeditAppPrivate *priv; g_return_val_if_fail (GEDIT_IS_APP (app), NULL); priv = gedit_app_get_instance_private (app); if (priv->print_settings == NULL) { load_print_settings (app); } return gtk_print_settings_copy (priv->print_settings); }
/* Returns a copy */ GtkPageSetup * _gedit_app_get_default_page_setup (GeditApp *app) { GeditAppPrivate *priv; g_return_val_if_fail (GEDIT_IS_APP (app), NULL); priv = gedit_app_get_instance_private (app); if (priv->page_setup == NULL) { load_page_setup (app); } return gtk_page_setup_copy (priv->page_setup); }
static void gedit_app_activate (GApplication *application) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (GEDIT_APP (application)); open_files (application, priv->new_window, priv->new_document, priv->geometry, priv->line_position, priv->column_position, priv->encoding, priv->stdin_stream, priv->file_list, priv->command_line); }
void _gedit_app_set_default_print_settings (GeditApp *app, GtkPrintSettings *settings) { GeditAppPrivate *priv; g_return_if_fail (GEDIT_IS_APP (app)); g_return_if_fail (GTK_IS_PRINT_SETTINGS (settings)); priv = gedit_app_get_instance_private (app); if (priv->print_settings != NULL) { g_object_unref (priv->print_settings); } priv->print_settings = g_object_ref (settings); }
static void app_lockdown_changed (GeditApp *app) { GeditAppPrivate *priv; GList *windows, *l; priv = gedit_app_get_instance_private (app); windows = gtk_application_get_windows (GTK_APPLICATION (app)); for (l = windows; l != NULL; l = g_list_next (l)) { if (GEDIT_IS_WINDOW (l->data)) { _gedit_window_set_lockdown (GEDIT_WINDOW (l->data), priv->lockdown); } } g_object_notify (G_OBJECT (app), "lockdown"); }
static void clear_options (GeditApp *app) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (app); g_free (priv->geometry); g_clear_object (&priv->stdin_stream); g_slist_free_full (priv->file_list, g_object_unref); priv->new_window = FALSE; priv->new_document = FALSE; priv->geometry = NULL; priv->encoding = NULL; priv->file_list = NULL; priv->line_position = 0; priv->column_position = 0; priv->command_line = NULL; }
void _gedit_app_set_lockdown_bit (GeditApp *app, GeditLockdownMask bit, gboolean value) { GeditAppPrivate *priv; g_return_if_fail (GEDIT_IS_APP (app)); priv = gedit_app_get_instance_private (app); if (value) { priv->lockdown |= bit; } else { priv->lockdown &= ~bit; } app_lockdown_changed (app); }
static void gedit_app_init (GeditApp *app) { GeditAppPrivate *priv; priv = gedit_app_get_instance_private (app); g_set_application_name ("gedit"); gtk_window_set_default_icon_name ("accessories-text-editor"); priv->monitor = g_network_monitor_get_default (); g_signal_connect (priv->monitor, "network-changed", G_CALLBACK (get_network_available), app); g_application_add_main_option_entries (G_APPLICATION (app), options); #ifdef ENABLE_INTROSPECTION g_application_add_option_group (G_APPLICATION (app), g_irepository_get_option_group ()); #endif }
static void load_print_settings (GeditApp *app) { GeditAppPrivate *priv; gchar *filename; GError *error = NULL; priv = gedit_app_get_instance_private (app); g_return_if_fail (priv->print_settings == NULL); filename = get_print_settings_file (); priv->print_settings = gtk_print_settings_new_from_file (filename, &error); if (error != NULL) { /* - Ignore file not found error. * - Ignore empty file error, i.e. group not found. This happens * when we click on cancel in the print dialog, when using the * printing for the first time in gedit. */ if (!g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT) && !g_error_matches (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_GROUP_NOT_FOUND)) { g_warning ("Load print settings error: %s", error->message); } g_error_free (error); } g_free (filename); /* fall back to default settings */ if (priv->print_settings == NULL) { priv->print_settings = gtk_print_settings_new (); } }
static gint gedit_app_command_line (GApplication *application, GApplicationCommandLine *cl) { GeditAppPrivate *priv; GVariantDict *options; const gchar *encoding_charset; const gchar **remaining_args; priv = gedit_app_get_instance_private (GEDIT_APP (application)); options = g_application_command_line_get_options_dict (cl); g_variant_dict_lookup (options, "new-window", "b", &priv->new_window); g_variant_dict_lookup (options, "new-document", "b", &priv->new_document); g_variant_dict_lookup (options, "geometry", "s", &priv->geometry); if (g_variant_dict_contains (options, "wait")) { priv->command_line = cl; } if (g_variant_dict_lookup (options, "encoding", "&s", &encoding_charset)) { priv->encoding = gtk_source_encoding_get_from_charset (encoding_charset); if (priv->encoding == NULL) { g_application_command_line_printerr (cl, _("%s: invalid encoding."), encoding_charset); } } /* Parse filenames */ if (g_variant_dict_lookup (options, G_OPTION_REMAINING, "^a&ay", &remaining_args)) { gint i; for (i = 0; remaining_args[i]; i++) { if (*remaining_args[i] == '+') { if (*(remaining_args[i] + 1) == '\0') { /* goto the last line of the document */ priv->line_position = G_MAXINT; priv->column_position = 0; } else { get_line_column_position (remaining_args[i] + 1, &priv->line_position, &priv->column_position); } } else if (*remaining_args[i] == '-' && *(remaining_args[i] + 1) == '\0') { priv->stdin_stream = g_application_command_line_get_stdin (cl); } else { GFile *file; file = g_application_command_line_create_file_for_arg (cl, remaining_args[i]); priv->file_list = g_slist_prepend (priv->file_list, file); } } priv->file_list = g_slist_reverse (priv->file_list); g_free (remaining_args); } g_application_activate (application); clear_options (GEDIT_APP (application)); return 0; }
static void gedit_app_startup (GApplication *application) { GeditAppPrivate *priv; GtkCssProvider *css_provider; GtkSourceStyleSchemeManager *manager; const gchar *dir; gchar *icon_dir; #ifndef ENABLE_GVFS_METADATA const gchar *cache_dir; gchar *metadata_filename; #endif priv = gedit_app_get_instance_private (GEDIT_APP (application)); G_APPLICATION_CLASS (gedit_app_parent_class)->startup (application); /* Setup debugging */ gedit_debug_init (); gedit_debug_message (DEBUG_APP, "Startup"); gedit_debug_message (DEBUG_APP, "Set icon"); dir = gedit_dirs_get_gedit_data_dir (); icon_dir = g_build_filename (dir, "icons", NULL); gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (), icon_dir); g_free (icon_dir); setup_theme_extensions (GEDIT_APP (application)); #ifndef ENABLE_GVFS_METADATA cache_dir = gedit_dirs_get_user_cache_dir (); metadata_filename = g_build_filename (cache_dir, "gedit-metadata.xml", NULL); gedit_metadata_manager_init (metadata_filename); g_free (metadata_filename); #endif /* Load settings */ priv->settings = gedit_settings_new (); priv->ui_settings = g_settings_new ("org.gnome.gedit.preferences.ui"); priv->window_settings = g_settings_new ("org.gnome.gedit.state.window"); /* initial lockdown state */ priv->lockdown = gedit_settings_get_lockdown (GEDIT_SETTINGS (priv->settings)); g_action_map_add_action_entries (G_ACTION_MAP (application), app_entries, G_N_ELEMENTS (app_entries), application); /* menus */ priv->window_menu = gtk_application_get_menubar (GTK_APPLICATION (application)); if (priv->window_menu == NULL) { priv->window_menu = get_menu_model (GEDIT_APP (application), "gear-menu"); } else { g_object_ref (priv->window_menu); } priv->notebook_menu = get_menu_model (GEDIT_APP (application), "notebook-menu"); priv->tab_width_menu = get_menu_model (GEDIT_APP (application), "tab-width-menu"); priv->line_col_menu = get_menu_model (GEDIT_APP (application), "line-col-menu"); /* Accelerators */ add_accelerator (GTK_APPLICATION (application), "app.new-window", "<Primary>N"); add_accelerator (GTK_APPLICATION (application), "app.quit", "<Primary>Q"); add_accelerator (GTK_APPLICATION (application), "app.help", "F1"); add_accelerator (GTK_APPLICATION (application), "win.gear-menu", "F10"); add_accelerator (GTK_APPLICATION (application), "win.open", "<Primary>O"); add_accelerator (GTK_APPLICATION (application), "win.save", "<Primary>S"); add_accelerator (GTK_APPLICATION (application), "win.save-as", "<Primary><Shift>S"); add_accelerator (GTK_APPLICATION (application), "win.save-all", "<Primary><Shift>L"); add_accelerator (GTK_APPLICATION (application), "win.new-tab", "<Primary>T"); add_accelerator (GTK_APPLICATION (application), "win.reopen-closed-tab", "<Primary><Shift>T"); add_accelerator (GTK_APPLICATION (application), "win.close", "<Primary>W"); add_accelerator (GTK_APPLICATION (application), "win.close-all", "<Primary><Shift>W"); add_accelerator (GTK_APPLICATION (application), "win.print", "<Primary>P"); add_accelerator (GTK_APPLICATION (application), "win.find", "<Primary>F"); add_accelerator (GTK_APPLICATION (application), "win.find-next", "<Primary>G"); add_accelerator (GTK_APPLICATION (application), "win.find-prev", "<Primary><Shift>G"); add_accelerator (GTK_APPLICATION (application), "win.replace", "<Primary>H"); add_accelerator (GTK_APPLICATION (application), "win.clear-highlight", "<Primary><Shift>K"); add_accelerator (GTK_APPLICATION (application), "win.goto-line", "<Primary>I"); add_accelerator (GTK_APPLICATION (application), "win.focus-active-view", "Escape"); add_accelerator (GTK_APPLICATION (application), "win.side-panel", "F9"); add_accelerator (GTK_APPLICATION (application), "win.bottom-panel", "<Primary>F9"); add_accelerator (GTK_APPLICATION (application), "win.fullscreen", "F11"); add_accelerator (GTK_APPLICATION (application), "win.new-tab-group", "<Primary><Alt>N"); add_accelerator (GTK_APPLICATION (application), "win.previous-tab-group", "<Primary><Shift><Alt>Page_Up"); add_accelerator (GTK_APPLICATION (application), "win.next-tab-group", "<Primary><Shift><Alt>Page_Down"); add_accelerator (GTK_APPLICATION (application), "win.previous-document", "<Primary><Alt>Page_Up"); add_accelerator (GTK_APPLICATION (application), "win.next-document", "<Primary><Alt>Page_Down"); load_accels (); /* Load custom css */ g_object_unref (load_css_from_resource ("gedit-style.css", TRUE)); css_provider = load_css_from_resource ("gedit-style-os.css", FALSE); g_clear_object (&css_provider); /* * We use the default gtksourceview style scheme manager so that plugins * can obtain it easily without a gedit specific api, but we need to * add our search path at startup before the manager is actually used. */ manager = gtk_source_style_scheme_manager_get_default (); gtk_source_style_scheme_manager_append_search_path (manager, gedit_dirs_get_user_styles_dir ()); priv->engine = gedit_plugins_engine_get_default (); priv->extensions = peas_extension_set_new (PEAS_ENGINE (priv->engine), GEDIT_TYPE_APP_ACTIVATABLE, "app", GEDIT_APP (application), NULL); g_signal_connect (priv->extensions, "extension-added", G_CALLBACK (extension_added), application); g_signal_connect (priv->extensions, "extension-removed", G_CALLBACK (extension_removed), application); peas_extension_set_foreach (priv->extensions, (PeasExtensionSetForeachFunc) extension_added, application); }