|
Packit |
116408 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
|
Packit |
116408 |
/*
|
|
Packit |
116408 |
* Copyright (C) 2002 CodeFactory AB
|
|
Packit |
116408 |
* Copyright (C) 2002 Mikael Hallendal <micke@imendio.com>
|
|
Packit |
116408 |
* Copyright (C) 2004-2008 Imendio AB
|
|
Packit |
116408 |
* Copyright (C) 2012 Aleksander Morgado <aleksander@gnu.org>
|
|
Packit |
116408 |
* Copyright (C) 2017, 2018 Sébastien Wilmet <swilmet@gnome.org>
|
|
Packit |
116408 |
*
|
|
Packit |
116408 |
* This program is free software; you can redistribute it and/or
|
|
Packit |
116408 |
* modify it under the terms of the GNU General Public License as
|
|
Packit |
116408 |
* published by the Free Software Foundation; either version 2 of the
|
|
Packit |
116408 |
* License, or (at your option) any later version.
|
|
Packit |
116408 |
*
|
|
Packit |
116408 |
* This program is distributed in the hope that it will be useful,
|
|
Packit |
116408 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
116408 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
116408 |
* General Public License for more details.
|
|
Packit |
116408 |
*
|
|
Packit |
116408 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
116408 |
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
116408 |
*/
|
|
Packit |
116408 |
|
|
Packit |
116408 |
#include "config.h"
|
|
Packit |
116408 |
#include "dh-app.h"
|
|
Packit |
116408 |
#include <glib/gi18n.h>
|
|
Packit |
116408 |
#include "dh-assistant.h"
|
|
Packit |
116408 |
#include "dh-preferences.h"
|
|
Packit |
116408 |
#include "dh-settings.h"
|
|
Packit |
116408 |
#include "dh-util.h"
|
|
Packit |
116408 |
|
|
Packit |
116408 |
G_DEFINE_TYPE (DhApp, dh_app, GTK_TYPE_APPLICATION);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static DhAssistant *
|
|
Packit |
116408 |
get_active_assistant_window (DhApp *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
GList *windows;
|
|
Packit |
116408 |
GList *l;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
windows = gtk_application_get_windows (GTK_APPLICATION (app));
|
|
Packit |
116408 |
|
|
Packit |
116408 |
for (l = windows; l != NULL; l = l->next) {
|
|
Packit |
116408 |
GtkWindow *cur_window = GTK_WINDOW (l->data);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (DH_IS_ASSISTANT (cur_window))
|
|
Packit |
116408 |
return DH_ASSISTANT (cur_window);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
return NULL;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
save_active_main_window_gsettings (DhApp *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhWindow *active_window;
|
|
Packit |
116408 |
DhSettings *settings;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
active_window = dh_app_get_active_main_window (app, FALSE);
|
|
Packit |
116408 |
if (active_window == NULL)
|
|
Packit |
116408 |
return;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
settings = dh_settings_get_singleton ();
|
|
Packit |
116408 |
dh_util_window_settings_save (GTK_WINDOW (active_window),
|
|
Packit |
116408 |
dh_settings_peek_window_settings (settings));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
save_active_assistant_window_gsettings (DhApp *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhAssistant *active_assistant;
|
|
Packit |
116408 |
DhSettings *settings;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
active_assistant = get_active_assistant_window (app);
|
|
Packit |
116408 |
if (active_assistant == NULL)
|
|
Packit |
116408 |
return;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
settings = dh_settings_get_singleton ();
|
|
Packit |
116408 |
dh_util_window_settings_save (GTK_WINDOW (active_assistant),
|
|
Packit |
116408 |
dh_settings_peek_assistant_settings (settings));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
new_window_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
GtkWidget *new_window;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
save_active_main_window_gsettings (app);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
new_window = dh_window_new (GTK_APPLICATION (app));
|
|
Packit |
116408 |
gtk_widget_show_all (new_window);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
preferences_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
GtkWindow *parent_window;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
parent_window = (GtkWindow *) dh_app_get_active_main_window (app, FALSE);
|
|
Packit |
116408 |
dh_preferences_show_dialog (parent_window);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
help_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
GtkWindow *window;
|
|
Packit |
116408 |
GError *error = NULL;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
window = (GtkWindow *) dh_app_get_active_main_window (app, FALSE);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
gtk_show_uri_on_window (window, "help:devhelp", GDK_CURRENT_TIME, &error);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (error != NULL) {
|
|
Packit |
116408 |
g_warning ("Failed to open the documentation: %s", error->message);
|
|
Packit |
116408 |
g_clear_error (&error);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
about_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
GtkWindow *parent_window;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
const gchar *authors[] = {
|
|
Packit |
116408 |
"Mikael Hallendal <micke@imendio.com>",
|
|
Packit |
116408 |
"Richard Hult <richard@imendio.com>",
|
|
Packit |
116408 |
"Johan Dahlin <johan@gnome.org>",
|
|
Packit |
116408 |
"Ross Burton <ross@burtonini.com>",
|
|
Packit |
116408 |
"Aleksander Morgado <aleksander@lanedo.com>",
|
|
Packit |
116408 |
"Thomas Bechtold <toabctl@gnome.org>",
|
|
Packit |
116408 |
"Frédéric Péters <fpeters@0d.be>",
|
|
Packit |
116408 |
"Sébastien Wilmet <swilmet@gnome.org>",
|
|
Packit |
116408 |
NULL
|
|
Packit |
116408 |
};
|
|
Packit |
116408 |
|
|
Packit |
116408 |
parent_window = (GtkWindow *) dh_app_get_active_main_window (app, FALSE);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
gtk_show_about_dialog (parent_window,
|
|
Packit |
116408 |
/* Translators: please don't translate "Devhelp" (it's marked as
|
|
Packit |
116408 |
* translatable for transliteration only).
|
|
Packit |
116408 |
*/
|
|
Packit |
116408 |
"name", _("Devhelp"),
|
|
Packit |
116408 |
"version", PACKAGE_VERSION,
|
|
Packit |
116408 |
"comments", _("A developer tool for browsing and searching API documentation"),
|
|
Packit |
116408 |
"authors", authors,
|
|
Packit |
116408 |
"translator-credits", _("translator-credits"),
|
|
Packit |
116408 |
"website", PACKAGE_URL,
|
|
Packit |
116408 |
"website-label", _("Devhelp Website"),
|
|
Packit |
116408 |
"logo-icon-name", PACKAGE_TARNAME,
|
|
Packit |
116408 |
"license-type", GTK_LICENSE_GPL_2_0,
|
|
Packit |
116408 |
"copyright", "Copyright 2001-2018 – the Devhelp team",
|
|
Packit |
116408 |
NULL);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
quit_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
save_active_main_window_gsettings (app);
|
|
Packit |
116408 |
save_active_assistant_window_gsettings (app);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_application_quit (G_APPLICATION (app));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
search_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
const gchar *keyword;
|
|
Packit |
116408 |
DhWindow *window;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
keyword = g_variant_get_string (parameter, NULL);
|
|
Packit |
116408 |
if (keyword == NULL || keyword[0] == '\0') {
|
|
Packit |
116408 |
g_warning ("Cannot search in application window: no keyword given.");
|
|
Packit |
116408 |
return;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
window = dh_app_get_active_main_window (app, TRUE);
|
|
Packit |
116408 |
dh_window_search (window, keyword);
|
|
Packit |
116408 |
gtk_window_present (GTK_WINDOW (window));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
search_assistant_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
DhAssistant *assistant;
|
|
Packit |
116408 |
const gchar *keyword;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
keyword = g_variant_get_string (parameter, NULL);
|
|
Packit |
116408 |
if (keyword == NULL || keyword[0] == '\0') {
|
|
Packit |
116408 |
g_warning ("Cannot look for keyword in Search Assistant: no keyword given.");
|
|
Packit |
116408 |
return;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
assistant = get_active_assistant_window (app);
|
|
Packit |
116408 |
if (assistant == NULL)
|
|
Packit |
116408 |
assistant = dh_assistant_new (app);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
dh_assistant_search (assistant, keyword);
|
|
Packit |
116408 |
gtk_window_present (GTK_WINDOW (assistant));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
raise_cb (GSimpleAction *action,
|
|
Packit |
116408 |
GVariant *parameter,
|
|
Packit |
116408 |
gpointer user_data)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (user_data);
|
|
Packit |
116408 |
GtkWindow *window;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
window = gtk_application_get_active_window (GTK_APPLICATION (app));
|
|
Packit |
116408 |
if (window == NULL)
|
|
Packit |
116408 |
window = (GtkWindow *) dh_app_get_active_main_window (app, TRUE);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
gtk_window_present (window);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
add_action_entries (DhApp *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
const GActionEntry app_entries[] = {
|
|
Packit |
116408 |
/* General actions */
|
|
Packit |
116408 |
{ "new-window", new_window_cb },
|
|
Packit |
116408 |
{ "preferences", preferences_cb },
|
|
Packit |
116408 |
{ "help", help_cb },
|
|
Packit |
116408 |
{ "about", about_cb },
|
|
Packit |
116408 |
{ "quit", quit_cb },
|
|
Packit |
116408 |
|
|
Packit |
116408 |
/* Additional commandline-specific actions */
|
|
Packit |
116408 |
{ "search", search_cb, "s" },
|
|
Packit |
116408 |
{ "search-assistant", search_assistant_cb, "s" },
|
|
Packit |
116408 |
{ "raise", raise_cb },
|
|
Packit |
116408 |
};
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
|
Packit |
116408 |
app_entries,
|
|
Packit |
116408 |
G_N_ELEMENTS (app_entries),
|
|
Packit |
116408 |
app);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
setup_go_to_tab_accelerators (GtkApplication *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
const gchar *accels[] = {NULL, NULL};
|
|
Packit |
116408 |
gint key_num;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
for (key_num = 1; key_num <= 9; key_num++) {
|
|
Packit |
116408 |
gchar *accel;
|
|
Packit |
116408 |
gchar *detailed_action_name;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accel = g_strdup_printf ("<Alt>%d", key_num);
|
|
Packit |
116408 |
accels[0] = accel;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
detailed_action_name = g_strdup_printf ("win.go-to-tab(uint16 %d)", key_num - 1);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, detailed_action_name, accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_free (accel);
|
|
Packit |
116408 |
g_free (detailed_action_name);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
/* On a typical keyboard the 0 is after 9, so it's the equivalent of 10
|
|
Packit |
116408 |
* (9 starting from 0).
|
|
Packit |
116408 |
*/
|
|
Packit |
116408 |
accels[0] = "<Alt>0";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.go-to-tab(uint16 9)", accels);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
setup_accelerators (GtkApplication *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
const gchar *accels[] = {NULL, NULL, NULL, NULL};
|
|
Packit |
116408 |
|
|
Packit |
116408 |
setup_go_to_tab_accelerators (app);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>0";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.zoom-default", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>minus";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.zoom-out", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
/* For "<Control>equal": Epiphany also has this keyboard shortcut for
|
|
Packit |
116408 |
* zoom-in. On keyboards the = and + are usually on the same key, but +
|
|
Packit |
116408 |
* is less convenient to type because Shift must be pressed too.
|
|
Packit |
116408 |
* Apparently it's usual on Windows to press Ctrl+= to zoom in.
|
|
Packit |
116408 |
* https://bugzilla.gnome.org/show_bug.cgi?id=743704
|
|
Packit |
116408 |
*/
|
|
Packit |
116408 |
accels[0] = "<Control>plus";
|
|
Packit |
116408 |
accels[1] = "<Control>equal";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.zoom-in", accels);
|
|
Packit |
116408 |
accels[1] = NULL;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>f";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.find", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>c";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.copy", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>p";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.print", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>t";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.new-tab", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>n";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "app.new-window", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>Page_Down";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.next-tab", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>Page_Up";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.prev-tab", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>w";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.close", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>q";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "app.quit", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "F1";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "app.help", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "F9";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.show-sidebar", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "F10";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.show-window-menu", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Alt>Right";
|
|
Packit |
116408 |
accels[1] = "Forward";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.go-forward", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Alt>Left";
|
|
Packit |
116408 |
accels[1] = "Back";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.go-back", accels);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
accels[0] = "<Control>k";
|
|
Packit |
116408 |
accels[1] = "<Control>s";
|
|
Packit |
116408 |
accels[2] = "<Control>l";
|
|
Packit |
116408 |
gtk_application_set_accels_for_action (app, "win.focus-search", accels);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
set_app_menu_if_needed (GtkApplication *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
GMenu *manual_app_menu;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
manual_app_menu = gtk_application_get_menu_by_id (app, "manual-app-menu");
|
|
Packit |
116408 |
|
|
Packit |
116408 |
/* Have the g_return in all cases, to catch problems in all cases. */
|
|
Packit |
116408 |
g_return_if_fail (manual_app_menu != NULL);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (gtk_application_prefers_app_menu (app))
|
|
Packit |
116408 |
gtk_application_set_app_menu (app, G_MENU_MODEL (manual_app_menu));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
dh_app_startup (GApplication *application)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (application);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_application_set_resource_base_path (application, "/org/gnome/devhelp");
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (G_APPLICATION_CLASS (dh_app_parent_class)->startup != NULL)
|
|
Packit |
116408 |
G_APPLICATION_CLASS (dh_app_parent_class)->startup (application);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
add_action_entries (app);
|
|
Packit |
116408 |
setup_accelerators (GTK_APPLICATION (app));
|
|
Packit |
116408 |
set_app_menu_if_needed (GTK_APPLICATION (app));
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
dh_app_activate (GApplication *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app), "new-window", NULL);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static gboolean option_version;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static GOptionEntry options[] = {
|
|
Packit |
116408 |
{ "new-window", 'n',
|
|
Packit |
116408 |
0, G_OPTION_ARG_NONE, NULL,
|
|
Packit |
116408 |
N_("Opens a new Devhelp window"),
|
|
Packit |
116408 |
NULL
|
|
Packit |
116408 |
},
|
|
Packit |
116408 |
{ "search", 's',
|
|
Packit |
116408 |
0, G_OPTION_ARG_STRING, NULL,
|
|
Packit |
116408 |
N_("Search for a keyword"),
|
|
Packit |
116408 |
N_("KEYWORD")
|
|
Packit |
116408 |
},
|
|
Packit |
116408 |
{ "search-assistant", 'a',
|
|
Packit |
116408 |
0, G_OPTION_ARG_STRING, NULL,
|
|
Packit |
116408 |
N_("Search and display any hit in the assistant window"),
|
|
Packit |
116408 |
N_("KEYWORD")
|
|
Packit |
116408 |
},
|
|
Packit |
116408 |
{ "version", 'v',
|
|
Packit |
116408 |
0, G_OPTION_ARG_NONE, &option_version,
|
|
Packit |
116408 |
N_("Display the version and exit"),
|
|
Packit |
116408 |
NULL
|
|
Packit |
116408 |
},
|
|
Packit |
116408 |
{ "quit", 'q',
|
|
Packit |
116408 |
0, G_OPTION_ARG_NONE, NULL,
|
|
Packit |
116408 |
N_("Quit any running Devhelp"),
|
|
Packit |
116408 |
NULL
|
|
Packit |
116408 |
},
|
|
Packit |
116408 |
{ NULL }
|
|
Packit |
116408 |
};
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static gint
|
|
Packit |
116408 |
dh_app_handle_local_options (GApplication *app,
|
|
Packit |
116408 |
GVariantDict *local_options)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
if (option_version) {
|
|
Packit |
116408 |
g_print ("%s %s\n", g_get_application_name (), PACKAGE_VERSION);
|
|
Packit |
116408 |
return 0;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
return -1;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static gint
|
|
Packit |
116408 |
dh_app_command_line (GApplication *g_app,
|
|
Packit |
116408 |
GApplicationCommandLine *command_line)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
DhApp *app = DH_APP (g_app);
|
|
Packit |
116408 |
GVariantDict *options_dict;
|
|
Packit |
116408 |
gboolean option_new_window = FALSE;
|
|
Packit |
116408 |
const gchar *option_search = NULL;
|
|
Packit |
116408 |
const gchar *option_search_assistant = NULL;
|
|
Packit |
116408 |
gboolean option_quit = FALSE;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
options_dict = g_application_command_line_get_options_dict (command_line);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_variant_dict_lookup (options_dict, "new-window", "b", &option_new_window);
|
|
Packit |
116408 |
g_variant_dict_lookup (options_dict, "search", "&s", &option_search);
|
|
Packit |
116408 |
g_variant_dict_lookup (options_dict, "search-assistant", "&s", &option_search_assistant);
|
|
Packit |
116408 |
g_variant_dict_lookup (options_dict, "quit", "b", &option_quit);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (option_quit) {
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app), "quit", NULL);
|
|
Packit |
116408 |
return 0;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (option_new_window)
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app), "new-window", NULL);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (option_search != NULL)
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app),
|
|
Packit |
116408 |
"search",
|
|
Packit |
116408 |
g_variant_new_string (option_search));
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (option_search_assistant != NULL)
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app),
|
|
Packit |
116408 |
"search-assistant",
|
|
Packit |
116408 |
g_variant_new_string (option_search_assistant));
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app), "raise", NULL);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
return 0;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
dh_app_class_init (DhAppClass *klass)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
GApplicationClass *application_class = G_APPLICATION_CLASS (klass);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
application_class->startup = dh_app_startup;
|
|
Packit |
116408 |
application_class->activate = dh_app_activate;
|
|
Packit |
116408 |
application_class->handle_local_options = dh_app_handle_local_options;
|
|
Packit |
116408 |
application_class->command_line = dh_app_command_line;
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
static void
|
|
Packit |
116408 |
dh_app_init (DhApp *app)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
/* Translators: please don't translate "Devhelp" (it's marked as
|
|
Packit |
116408 |
* translatable for transliteration only).
|
|
Packit |
116408 |
*/
|
|
Packit |
116408 |
g_set_application_name (_("Devhelp"));
|
|
Packit |
116408 |
gtk_window_set_default_icon_name ("devhelp");
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_application_add_main_option_entries (G_APPLICATION (app), options);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
DhApp *
|
|
Packit |
116408 |
dh_app_new (void)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
return g_object_new (DH_TYPE_APP,
|
|
Packit |
116408 |
"application-id", "org.gnome.Devhelp",
|
|
Packit |
116408 |
"flags", G_APPLICATION_HANDLES_COMMAND_LINE,
|
|
Packit |
116408 |
NULL);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
/* Returns: (transfer none) (nullable). */
|
|
Packit |
116408 |
DhWindow *
|
|
Packit |
116408 |
dh_app_get_active_main_window (DhApp *app,
|
|
Packit |
116408 |
gboolean create_if_none)
|
|
Packit |
116408 |
{
|
|
Packit |
116408 |
GList *windows;
|
|
Packit |
116408 |
GList *l;
|
|
Packit |
116408 |
|
|
Packit |
116408 |
g_return_val_if_fail (DH_IS_APP (app), NULL);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
windows = gtk_application_get_windows (GTK_APPLICATION (app));
|
|
Packit |
116408 |
|
|
Packit |
116408 |
for (l = windows; l != NULL; l = l->next) {
|
|
Packit |
116408 |
GtkWindow *cur_window = GTK_WINDOW (l->data);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (DH_IS_WINDOW (cur_window))
|
|
Packit |
116408 |
return DH_WINDOW (cur_window);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
if (create_if_none) {
|
|
Packit |
116408 |
g_action_group_activate_action (G_ACTION_GROUP (app), "new-window", NULL);
|
|
Packit |
116408 |
|
|
Packit |
116408 |
/* Look again, but with create_if_none = FALSE to avoid an
|
|
Packit |
116408 |
* infinite recursion in case creating a new main window fails.
|
|
Packit |
116408 |
*/
|
|
Packit |
116408 |
return dh_app_get_active_main_window (app, FALSE);
|
|
Packit |
116408 |
}
|
|
Packit |
116408 |
|
|
Packit |
116408 |
return NULL;
|
|
Packit |
116408 |
}
|