gnome-control-center/shell/control-center.c
Marek Kasik 7962a25ecf Printers: Open firewall for required connections when searching for printers
This commit enables services mdns, ipp, ipp-client and samba-client on
firewall for 5 minutes for detection of network printers (#648784).
It enables required services permanently for printers selected by user
for addition then. It shows a notification for the permanent enable.
It uses firewalld, so if it is not installed or running it shows a warning
message to the user in the place where discovered printers will be shown
(both local and network). The warning disappears after the finish of
printers discovery (but not from network part if no printer was found).
2011-07-27 13:33:48 +02:00

201 lines
5.9 KiB
C

/*
* Copyright (c) 2009, 2010 Intel, Inc.
* Copyright (c) 2010 Red Hat, Inc.
*
* The Control Center is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* The Control Center is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License along
* with the Control Center; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
* Author: Thomas Wood <thos@gnome.org>
*/
#include "config.h"
#include <glib/gi18n.h>
#include <stdlib.h>
#include "gnome-control-center.h"
#include <gtk/gtk.h>
#include <string.h>
#include <libnotify/notify.h>
#include "cc-shell-log.h"
G_GNUC_NORETURN static gboolean
option_version_cb (const gchar *option_name,
const gchar *value,
gpointer data,
GError **error)
{
g_print ("%s %s\n", PACKAGE, VERSION);
exit (0);
}
static char **start_panels = NULL;
static gboolean show_overview = FALSE;
static gboolean verbose = FALSE;
static gboolean show_help = FALSE;
static gboolean show_help_gtk = FALSE;
static gboolean show_help_all = FALSE;
const GOptionEntry all_options[] = {
{ "version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, option_version_cb, NULL, NULL },
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, N_("Enable verbose mode"), NULL },
{ "overview", 'o', 0, G_OPTION_ARG_NONE, &show_overview, N_("Show the overview"), NULL },
{ "help", 'h', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &show_help, N_("Show help options"), NULL },
{ "help-all", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &show_help_all, N_("Show help options"), NULL },
{ "help-gtk", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &show_help_gtk, N_("Show help options"), NULL },
{ G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &start_panels, N_("Panel to display"), NULL },
{ NULL } /* end the list */
};
static int
application_command_line_cb (GApplication *application,
GApplicationCommandLine *command_line,
GnomeControlCenter *shell)
{
int argc;
char **argv;
int retval = 0;
GOptionContext *context;
GError *error = NULL;
verbose = FALSE;
show_overview = FALSE;
show_help = FALSE;
start_panels = NULL;
argv = g_application_command_line_get_arguments (command_line, &argc);
context = g_option_context_new (N_("- System Settings"));
g_option_context_add_main_entries (context, all_options, GETTEXT_PACKAGE);
g_option_context_set_translation_domain(context, GETTEXT_PACKAGE);
g_option_context_add_group (context, gtk_get_option_group (TRUE));
g_option_context_set_help_enabled (context, FALSE);
if (g_option_context_parse (context, &argc, &argv, &error) == FALSE)
{
g_print (_("%s\nRun '%s --help' to see a full list of available command line options.\n"),
error->message, argv[0]);
g_error_free (error);
g_option_context_free (context);
return 1;
}
if (show_help || show_help_all || show_help_gtk)
{
gchar *help;
GOptionGroup *group;
if (show_help || show_help_all)
group = NULL;
else
group = gtk_get_option_group (FALSE);
help = g_option_context_get_help (context, FALSE, group);
g_print ("%s", help);
g_free (help);
g_option_context_free (context);
return 0;
}
g_option_context_free (context);
cc_shell_log_set_debug (verbose);
gnome_control_center_show (shell, GTK_APPLICATION (application));
if (show_overview)
{
gnome_control_center_set_overview_page (shell);
}
else if (start_panels != NULL && start_panels[0] != NULL)
{
const char *start_id;
GError *err = NULL;
start_id = start_panels[0];
if (!cc_shell_set_active_panel_from_id (CC_SHELL (shell), start_id, &err))
{
g_warning ("Could not load setting panel \"%s\": %s", start_id,
(err) ? err->message : "Unknown error");
retval = 1;
if (err)
{
g_error_free (err);
err = NULL;
}
}
}
gnome_control_center_present (shell);
gdk_notify_startup_complete ();
g_strfreev (argv);
if (start_panels != NULL)
{
g_strfreev (start_panels);
start_panels = NULL;
}
show_overview = FALSE;
return retval;
}
static void
application_startup_cb (GApplication *application,
GnomeControlCenter *shell)
{
/* nothing to do here, we don't want to show a window before
* we've looked at the commandline
*/
}
int
main (int argc, char **argv)
{
GnomeControlCenter *shell;
GtkApplication *application;
int status;
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
g_thread_init (NULL);
gtk_init (&argc, &argv);
cc_shell_log_init ();
/* register a symbolic icon size for use in sidebar lists */
gtk_icon_size_register ("cc-sidebar-list", 24, 24);
notify_init ("gnome-control-center");
shell = gnome_control_center_new ();
/* enforce single instance of this application */
application = gtk_application_new ("org.gnome.ControlCenter", G_APPLICATION_HANDLES_COMMAND_LINE);
g_signal_connect (application, "startup",
G_CALLBACK (application_startup_cb), shell);
g_signal_connect (application, "command-line",
G_CALLBACK (application_command_line_cb), shell);
status = g_application_run (G_APPLICATION (application), argc, argv);
g_object_unref (application);
return status;
}