diff options
Diffstat (limited to 'drivemount/src/drivemount.c')
-rw-r--r-- | drivemount/src/drivemount.c | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/drivemount/src/drivemount.c b/drivemount/src/drivemount.c new file mode 100644 index 00000000..d6a77f20 --- /dev/null +++ b/drivemount/src/drivemount.c @@ -0,0 +1,230 @@ +/* -*- mode: C; c-basic-offset: 4 -*- + * Drive Mount Applet + * Copyright (c) 2004 Canonical Ltd + * + * This library 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. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Author: + * James Henstridge <[email protected]> + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> + +#include <glib/gi18n.h> +#include <gtk/gtk.h> +#include <mate-panel-applet.h> + +#include "drive-list.h" + +static const char drivemount_iid[] = "DriveMountApplet"; +static const char factory_iid[] = "DriveMountAppletFactory"; + +static void +change_orient (MatePanelApplet *applet, + MatePanelAppletOrient o, + DriveList *drive_list) +{ + GtkOrientation orientation; + + switch (o) { + case MATE_PANEL_APPLET_ORIENT_LEFT: + case MATE_PANEL_APPLET_ORIENT_RIGHT: + orientation = GTK_ORIENTATION_VERTICAL; + break; + case MATE_PANEL_APPLET_ORIENT_UP: + case MATE_PANEL_APPLET_ORIENT_DOWN: + default: + orientation = GTK_ORIENTATION_HORIZONTAL; + } + drive_list_set_orientation (drive_list, orientation); +} + +static void +size_allocate (MatePanelApplet *applet, + GdkRectangle *allocation, + DriveList *drive_list) +{ + int size; + + switch (mate_panel_applet_get_orient (applet)) { + case MATE_PANEL_APPLET_ORIENT_LEFT: + case MATE_PANEL_APPLET_ORIENT_RIGHT: + size = allocation->width; + break; + case MATE_PANEL_APPLET_ORIENT_UP: + case MATE_PANEL_APPLET_ORIENT_DOWN: + default: + size = allocation->height; + } + drive_list_set_panel_size (drive_list, size); +} + +static void +change_background (MatePanelApplet *applet, + MatePanelAppletBackgroundType type, + GdkColor *colour, + cairo_pattern_t *pattern, + DriveList *drivelist) +{ + switch (type) { + case PANEL_NO_BACKGROUND: + drive_list_set_transparent (drivelist, FALSE); + break; + case PANEL_COLOR_BACKGROUND: + case PANEL_PIXMAP_BACKGROUND: + drive_list_set_transparent (drivelist, TRUE); + } +} + +static void +display_about_dialog (GtkAction *action, + DriveList *drive_list) +{ + const gchar *authors[] = { + "James Henstridge <[email protected]>", + NULL + }; + + const gchar *documenters[] = { + "Dan Mueth <[email protected]>", + "John Fleck <[email protected]>", + N_("MATE Documentation Team"), + NULL + }; + +#ifdef ENABLE_NLS + const char **p; + for (p = documenters; *p; ++p) + *p = _(*p); +#endif + + gtk_show_about_dialog (NULL, + "title", _("About Disk Mounter"), + "version", VERSION, + "copyright", _("Copyright \xC2\xA9 2004 Canonical Ltd\n" + "Copyright \xc2\xa9 2012-2020 MATE developers"), + "comments", _("Applet for mounting and unmounting block volumes."), + "authors", authors, + "documenters", documenters, + "translator-credits", _("translator-credits"), + "logo_icon_name", "media-floppy", + NULL); +} + +static void +display_help (GtkAction *action, + DriveList *drive_list) +{ + GdkScreen *screen; + GError *error = NULL; + + screen = gtk_widget_get_screen (GTK_WIDGET (drive_list)); + + gtk_show_uri_on_window (NULL, + "help:mate-drivemount", + gtk_get_current_event_time (), + &error); + + if (error) { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + _("There was an error displaying help: %s"), + error->message); + g_signal_connect (dialog, "response", + G_CALLBACK (gtk_widget_destroy), NULL); + gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); + gtk_window_set_screen (GTK_WINDOW (dialog), screen); + gtk_widget_show (dialog); + g_error_free (error); + } +} + +static const GtkActionEntry applet_menu_actions[] = { + { "Help", "help-browser", N_("_Help"), + NULL, NULL, + G_CALLBACK (display_help) }, + { "About", "help-about", N_("_About"), + NULL, NULL, + G_CALLBACK (display_about_dialog) } +}; + +static gboolean +applet_factory (MatePanelApplet *applet, + const char *iid, + gpointer user_data) +{ + gboolean ret = FALSE; + GtkWidget *drive_list; + AtkObject *ao; + GtkActionGroup *action_group; + + if (!strcmp (iid, drivemount_iid)) { + g_set_application_name (_("Disk Mounter")); + + gtk_window_set_default_icon_name ("media-floppy"); + + mate_panel_applet_set_flags (applet, MATE_PANEL_APPLET_EXPAND_MINOR); + + drive_list = drive_list_new (); + + gtk_container_add (GTK_CONTAINER (applet), drive_list); + + g_signal_connect_object (applet, "change_orient", + G_CALLBACK (change_orient), drive_list, 0); + g_signal_connect_object (applet, "size_allocate", + G_CALLBACK (size_allocate), drive_list, 0); + g_signal_connect (applet, "change_background", + G_CALLBACK (change_background), drive_list); + + /* set initial state */ + change_orient (applet, + mate_panel_applet_get_orient (applet), + DRIVE_LIST (drive_list)); + + action_group = gtk_action_group_new ("DriveMount Applet Actions"); + gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE); + gtk_action_group_add_actions (action_group, + applet_menu_actions, + G_N_ELEMENTS (applet_menu_actions), + drive_list); + mate_panel_applet_setup_menu_from_resource (applet, + DRIVEMOUNT_RESOURCE_PATH "drivemount-applet-menu.xml", + action_group); + g_object_unref (action_group); + + ao = gtk_widget_get_accessible (GTK_WIDGET (applet)); + atk_object_set_name (ao, _("Disk Mounter")); + + gtk_widget_show_all (GTK_WIDGET (applet)); + + ret = TRUE; + } + + return ret; +} + +MATE_PANEL_APPLET_OUT_PROCESS_FACTORY (factory_iid, + PANEL_TYPE_APPLET, + "Drive-Mount-Applet", + applet_factory, NULL) + |