diff options
author | Stefano Karapetsas <[email protected]> | 2012-12-07 06:06:41 -0800 |
---|---|---|
committer | Stefano Karapetsas <[email protected]> | 2012-12-07 06:06:41 -0800 |
commit | 12dcf19aa5f51901053c273cd7f5c17ce85e909d (patch) | |
tree | 5b71387df7bf817dd5d0dff60ecc09d8291dba0d /plugins | |
parent | a279b02b4d563d2300ccb588e5969c7dfac8108e (diff) | |
parent | 6e61d207a2088479f5bb12ce4edb1d2886c40b53 (diff) | |
download | mate-settings-daemon-12dcf19aa5f51901053c273cd7f5c17ce85e909d.tar.bz2 mate-settings-daemon-12dcf19aa5f51901053c273cd7f5c17ce85e909d.tar.xz |
Merge pull request #29 from jasmineaura/develop
Fix #23, and some cleanups
Diffstat (limited to 'plugins')
45 files changed, 282 insertions, 1844 deletions
diff --git a/plugins/Makefile.am b/plugins/Makefile.am index f1f227c..4741ba6 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -6,7 +6,6 @@ enabled_plugins = \ clipboard \ datetime \ dummy \ - font \ housekeeping \ keyboard \ media-keys \ diff --git a/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c b/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c index d905336..57ac653 100644 --- a/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c +++ b/plugins/a11y-keyboard/msd-a11y-keyboard-plugin.c @@ -102,3 +102,8 @@ msd_a11y_keyboard_plugin_class_init (MsdA11yKeyboardPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdA11yKeyboardPluginPrivate)); } + +static void +msd_a11y_keyboard_plugin_class_finalize (MsdA11yKeyboardPluginClass *klass) +{ +} diff --git a/plugins/background/msd-background-plugin.c b/plugins/background/msd-background-plugin.c index f5cb0d1..ee6b49c 100644 --- a/plugins/background/msd-background-plugin.c +++ b/plugins/background/msd-background-plugin.c @@ -27,85 +27,88 @@ #include "msd-background-plugin.h" #include "msd-background-manager.h" -//class MsdBackgroundPlugin -//{ - struct MsdBackgroundPluginPrivate { - MsdBackgroundManager* manager; - }; +struct MsdBackgroundPluginPrivate { + MsdBackgroundManager* manager; +}; - #define MSD_BACKGROUND_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE((object), MSD_TYPE_BACKGROUND_PLUGIN, MsdBackgroundPluginPrivate)) +#define MSD_BACKGROUND_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE((object), MSD_TYPE_BACKGROUND_PLUGIN, MsdBackgroundPluginPrivate)) - MATE_SETTINGS_PLUGIN_REGISTER(MsdBackgroundPlugin, msd_background_plugin) +MATE_SETTINGS_PLUGIN_REGISTER(MsdBackgroundPlugin, msd_background_plugin) - static void - msd_background_plugin_init (MsdBackgroundPlugin* plugin) - { - plugin->priv = MSD_BACKGROUND_PLUGIN_GET_PRIVATE(plugin); - - g_debug("MsdBackgroundPlugin initializing"); +static void +msd_background_plugin_init (MsdBackgroundPlugin* plugin) +{ + plugin->priv = MSD_BACKGROUND_PLUGIN_GET_PRIVATE(plugin); - plugin->priv->manager = msd_background_manager_new(); - } + g_debug("MsdBackgroundPlugin initializing"); - static void - msd_background_plugin_finalize (GObject* object) - { - MsdBackgroundPlugin* plugin; + plugin->priv->manager = msd_background_manager_new(); +} - g_return_if_fail(object != NULL); - g_return_if_fail(MSD_IS_BACKGROUND_PLUGIN(object)); +static void +msd_background_plugin_finalize (GObject* object) +{ + MsdBackgroundPlugin* plugin; - g_debug("MsdBackgroundPlugin finalizing"); + g_return_if_fail(object != NULL); + g_return_if_fail(MSD_IS_BACKGROUND_PLUGIN(object)); - plugin = MSD_BACKGROUND_PLUGIN(object); + g_debug("MsdBackgroundPlugin finalizing"); - g_return_if_fail(plugin->priv != NULL); + plugin = MSD_BACKGROUND_PLUGIN(object); - if (plugin->priv->manager != NULL) - { - g_object_unref (plugin->priv->manager); - } + g_return_if_fail(plugin->priv != NULL); - G_OBJECT_CLASS(msd_background_plugin_parent_class)->finalize(object); + if (plugin->priv->manager != NULL) + { + g_object_unref (plugin->priv->manager); } - static void - impl_activate (MateSettingsPlugin* plugin) - { - gboolean res; - GError* error; + G_OBJECT_CLASS(msd_background_plugin_parent_class)->finalize(object); +} - g_debug("Activating background plugin"); +static void +impl_activate (MateSettingsPlugin* plugin) +{ + gboolean res; + GError* error; - error = NULL; - res = msd_background_manager_start(MSD_BACKGROUND_PLUGIN(plugin)->priv->manager, &error); + g_debug("Activating background plugin"); - if (!res) - { - g_warning("Unable to start background manager: %s", error->message); - g_error_free(error); - } - } + error = NULL; + res = msd_background_manager_start(MSD_BACKGROUND_PLUGIN(plugin)->priv->manager, &error); - static void - impl_deactivate (MateSettingsPlugin* plugin) + if (!res) { - g_debug("Deactivating background plugin"); - - msd_background_manager_stop(MSD_BACKGROUND_PLUGIN(plugin)->priv->manager); + g_warning("Unable to start background manager: %s", error->message); + g_error_free(error); } +} - static void - msd_background_plugin_class_init (MsdBackgroundPluginClass* klass) - { - GObjectClass* object_class = G_OBJECT_CLASS(klass); - MateSettingsPluginClass* plugin_class = MATE_SETTINGS_PLUGIN_CLASS(klass); +static void +impl_deactivate (MateSettingsPlugin* plugin) +{ + g_debug("Deactivating background plugin"); - object_class->finalize = msd_background_plugin_finalize; + msd_background_manager_stop(MSD_BACKGROUND_PLUGIN(plugin)->priv->manager); +} - plugin_class->activate = impl_activate; - plugin_class->deactivate = impl_deactivate; +static void +msd_background_plugin_class_init (MsdBackgroundPluginClass* klass) +{ + GObjectClass* object_class = G_OBJECT_CLASS(klass); + MateSettingsPluginClass* plugin_class = MATE_SETTINGS_PLUGIN_CLASS(klass); + + object_class->finalize = msd_background_plugin_finalize; + + plugin_class->activate = impl_activate; + plugin_class->deactivate = impl_deactivate; + + g_type_class_add_private(klass, sizeof(MsdBackgroundPluginPrivate)); +} + +static void +msd_background_plugin_class_finalize (MsdBackgroundPluginClass *klass) +{ +} - g_type_class_add_private(klass, sizeof(MsdBackgroundPluginPrivate)); - } -//}
\ No newline at end of file diff --git a/plugins/clipboard/msd-clipboard-plugin.c b/plugins/clipboard/msd-clipboard-plugin.c index a7e4d86..da00eda 100644 --- a/plugins/clipboard/msd-clipboard-plugin.c +++ b/plugins/clipboard/msd-clipboard-plugin.c @@ -102,3 +102,9 @@ msd_clipboard_plugin_class_init (MsdClipboardPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdClipboardPluginPrivate)); } + +static void +msd_clipboard_plugin_class_finalize (MsdClipboardPluginClass *klass) +{ +} + diff --git a/plugins/dummy/msd-dummy-plugin.c b/plugins/dummy/msd-dummy-plugin.c index 5fbbc0b..ff4046d 100644 --- a/plugins/dummy/msd-dummy-plugin.c +++ b/plugins/dummy/msd-dummy-plugin.c @@ -102,3 +102,8 @@ msd_dummy_plugin_class_init (MsdDummyPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdDummyPluginPrivate)); } + +static void +msd_dummy_plugin_class_finalize (MsdDummyPluginClass *klass) +{ +} diff --git a/plugins/font/Makefile.am b/plugins/font/Makefile.am deleted file mode 100644 index d0cf9ce..0000000 --- a/plugins/font/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -NULL = - -plugin_LTLIBRARIES = \ - libfont.la \ - $(NULL) - -libfont_la_SOURCES = \ - msd-font-plugin.h \ - msd-font-plugin.c \ - msd-font-manager.h \ - msd-font-manager.c \ - delayed-dialog.h \ - delayed-dialog.c \ - $(NULL) - -libfont_la_CPPFLAGS = \ - -I$(top_srcdir)/mate-settings-daemon \ - -DMATE_SETTINGS_LOCALEDIR=\""$(datadir)/locale"\" \ - $(AM_CPPFLAGS) - -libfont_la_CFLAGS = \ - $(SETTINGS_PLUGIN_CFLAGS) \ - $(AM_CFLAGS) - -libfont_la_LDFLAGS = \ - $(MSD_PLUGIN_LDFLAGS) \ - $(NULL) - -libfont_la_LIBADD = \ - $(SETTINGS_PLUGIN_LIBS) \ - $(NULL) - -plugin_in_files = \ - font.mate-settings-plugin.in \ - $(NULL) - -plugin_DATA = $(plugin_in_files:.mate-settings-plugin.in=.mate-settings-plugin) - -EXTRA_DIST = \ - $(plugin_in_files) \ - $(NULL) - -CLEANFILES = \ - $(plugin_DATA) \ - $(NULL) - -DISTCLEANFILES = \ - $(plugin_DATA) \ - $(NULL) - -@MSD_INTLTOOL_PLUGIN_RULE@ diff --git a/plugins/font/delayed-dialog.c b/plugins/font/delayed-dialog.c deleted file mode 100644 index afec416..0000000 --- a/plugins/font/delayed-dialog.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2006 Novell, Inc. - * - * This program 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, 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. - */ - -#include <stdlib.h> -#include <string.h> - -#include <gtk/gtk.h> -#include <gdk/gdkx.h> - -#include "delayed-dialog.h" - -static gboolean delayed_show_timeout (gpointer data); -static GdkFilterReturn message_filter (GdkXEvent *xevent, - GdkEvent *event, - gpointer data); - -static GSList *dialogs = NULL; - -/** - * mate_settings_delayed_show_dialog: - * @dialog: the dialog - * - * Shows the dialog as with gtk_widget_show(), unless a window manager - * hasn't been started yet, in which case it will wait up to 5 seconds - * for that to happen before showing the dialog. - **/ -void -mate_settings_delayed_show_dialog (GtkWidget *dialog) -{ - GdkDisplay *display = gtk_widget_get_display (dialog); - Display *xdisplay = GDK_DISPLAY_XDISPLAY (display); - GdkScreen *screen = gtk_widget_get_screen (dialog); - GdkAtom manager_atom; - char selection_name[10]; - Atom selection_atom; - - /* We can't use gdk_selection_owner_get() for this, because - * it's an unknown out-of-process window. - */ - snprintf (selection_name, sizeof (selection_name), "WM_S%d", - gdk_screen_get_number (screen)); - selection_atom = XInternAtom (xdisplay, selection_name, True); - if (selection_atom && - XGetSelectionOwner (xdisplay, selection_atom) != None) { - gtk_widget_show (dialog); - return; - } - - dialogs = g_slist_prepend (dialogs, dialog); - - manager_atom = gdk_atom_intern ("MANAGER", FALSE); - gdk_display_add_client_message_filter (display, manager_atom, - message_filter, NULL); - - g_timeout_add (5000, delayed_show_timeout, NULL); -} - -static gboolean -delayed_show_timeout (gpointer data) -{ - GSList *l; - - for (l = dialogs; l; l = l->next) - gtk_widget_show (l->data); - g_slist_free (dialogs); - dialogs = NULL; - - /* FIXME: There's no gdk_display_remove_client_message_filter */ - - return FALSE; -} - -static GdkFilterReturn -message_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data) -{ - XClientMessageEvent *evt = (XClientMessageEvent *)xevent; - char *selection_name = XGetAtomName (evt->display, evt->data.l[1]); - int screen; - GSList *l, *next; - - if (!dialogs) - return GDK_FILTER_CONTINUE; - - if (strncmp (selection_name, "WM_S", 4) != 0) { - XFree (selection_name); - return GDK_FILTER_CONTINUE; - } - - screen = atoi (selection_name + 4); - - for (l = dialogs; l; l = next) { - GtkWidget *dialog = l->data; - next = l->next; - - if (gdk_screen_get_number (gtk_widget_get_screen (dialog)) == screen) { - gtk_widget_show (dialog); - dialogs = g_slist_remove (dialogs, dialog); - } - } - - if (!dialogs) { - /* FIXME: There's no gdk_display_remove_client_message_filter */ - } - - return GDK_FILTER_CONTINUE; -} diff --git a/plugins/font/delayed-dialog.h b/plugins/font/delayed-dialog.h deleted file mode 100644 index 2bc2313..0000000 --- a/plugins/font/delayed-dialog.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright © 2006 Novell, Inc. - * - * This program 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, 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. - */ - - -#ifndef __DELAYED_DIALOG_H -#define __DELAYED_DIALOG_H - -#include <gtk/gtk.h> - -#ifdef __cplusplus -extern "C" { -#endif - -void mate_settings_delayed_show_dialog (GtkWidget *dialog); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/plugins/font/font.mate-settings-plugin.in b/plugins/font/font.mate-settings-plugin.in deleted file mode 100644 index 6bb1c47..0000000 --- a/plugins/font/font.mate-settings-plugin.in +++ /dev/null @@ -1,8 +0,0 @@ -[MATE Settings Plugin] -Module=font -IAge=0 -_Name=Font -_Description=Font plugin -Authors=Rodrigo Moya -Copyright=Copyright © 2007 The MATE Foundation -Website= diff --git a/plugins/font/msd-font-manager.c b/plugins/font/msd-font-manager.c deleted file mode 100644 index 46206b4..0000000 --- a/plugins/font/msd-font-manager.c +++ /dev/null @@ -1,438 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 The MATE Foundation - * Copyright (C) 2007 William Jon McCann <[email protected]> - * - * This program 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. - * - */ - -#include "config.h" - -#include <sys/types.h> -#include <sys/wait.h> -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> -#include <sys/stat.h> -#include <dirent.h> - -#include <locale.h> - -#include <X11/Xatom.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <gdk/gdk.h> -#include <gdk/gdkx.h> -#include <gtk/gtk.h> -#include <gio/gio.h> - -#include "mate-settings-profile.h" -#include "msd-font-manager.h" -#include "delayed-dialog.h" - -static void msd_font_manager_class_init (MsdFontManagerClass *klass); -static void msd_font_manager_init (MsdFontManager *font_manager); - -G_DEFINE_TYPE (MsdFontManager, msd_font_manager, G_TYPE_OBJECT) - -static gpointer manager_object = NULL; - -static void -update_property (GString *props, const gchar* key, const gchar* value) -{ - gchar* needle; - size_t needle_len; - gchar* found = NULL; - - /* update an existing property */ - needle = g_strconcat (key, ":", NULL); - needle_len = strlen (needle); - if (g_str_has_prefix (props->str, needle)) - found = props->str; - else - found = strstr (props->str, needle); - - if (found) { - size_t value_index; - gchar* end; - - end = strchr (found, '\n'); - value_index = (found - props->str) + needle_len + 1; - g_string_erase (props, value_index, end ? (end - found - needle_len) : -1); - g_string_insert (props, value_index, "\n"); - g_string_insert (props, value_index, value); - } else { - g_string_append_printf (props, "%s:\t%s\n", key, value); - } -} - -static void -load_xcursor_theme (GSettings *settings) -{ - char *cursor_theme; - int size; - GString *add_string; - Display *dpy; - gchar numbuf[20]; - - mate_settings_profile_start (NULL); - - size = g_settings_get_int (settings, "cursor-size"); - if (size <= 0) { - return; - } - - cursor_theme = g_settings_get_string (settings, "cursor-theme"); - if (cursor_theme == NULL) { - return; - } - - /* get existing properties */ - dpy = XOpenDisplay (NULL); - g_return_if_fail (dpy != NULL); - add_string = g_string_new (XResourceManagerString (dpy)); - g_debug("load_xcursor_theme: existing res '%s'", add_string->str); - - update_property (add_string, "Xcursor.theme", cursor_theme); - update_property (add_string, "Xcursor.theme_core", "true"); - g_snprintf (numbuf, sizeof (numbuf), "%i", size); - update_property (add_string, "Xcursor.size", numbuf); - - g_debug("load_xcursor_theme: new res '%s'", add_string->str); - - /* Set the new X property */ - XChangeProperty(dpy, RootWindow (dpy, 0), - XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, add_string->str, add_string->len); - XCloseDisplay (dpy); - - g_free (cursor_theme); - g_string_free (add_string, TRUE); - - mate_settings_profile_end (NULL); -} - -static char* setup_dir(const char* font_dir_name, gboolean create) -{ - #if GLIB_CHECK_VERSION(2, 6, 0) - char* font_dir = g_build_path(G_DIR_SEPARATOR_S, g_get_user_config_dir(), "mate", "share", font_dir_name, NULL); - #else // glib version < 2.6.0 - char* font_dir = g_build_path(G_DIR_SEPARATOR_S, g_get_home_dir(), ".config", "mate", "share", font_dir_name, NULL); - #endif - - if (create) - { - if (g_mkdir_with_parents(font_dir, 0755) != 0) - { - g_warning("Cannot create needed directory \"%s\".", font_dir); - g_free(font_dir); - font_dir = NULL; - } - } - else if (!g_file_test(font_dir, G_FILE_TEST_EXISTS)) - { - g_free (font_dir); - font_dir = NULL; - } - - return font_dir; -} - -static char * -empty_check_dir (char *font_dir) -{ - char *file_name; - - if (!font_dir) - return NULL; - - /* remove the fonts.dir and fonts.scale files that mkfontdir generates. */ - - file_name = g_build_filename (G_DIR_SEPARATOR_S, font_dir, "fonts.dir", NULL); - unlink (file_name); - g_free (file_name); - - file_name = g_build_filename (G_DIR_SEPARATOR_S, font_dir, "fonts.scale", NULL); - unlink (file_name); - g_free (file_name); - - /* if it's empty, get rid of it. */ - if (0 == rmdir (font_dir)) { - g_free (font_dir); - font_dir = NULL; - } - - return font_dir; -} - -static char* -setup_font_dir (GSettings *settings) -{ - return empty_check_dir (setup_dir ("fonts", FALSE)); -} - -static char* -setup_cursor_dir (GSettings *settings) -{ - char *cursor_dir; - char *cursor_font; - DIR *dir; - struct dirent *file_dirent; - - cursor_font = g_settings_get_string (settings, "cursor-font"); - if (cursor_font != NULL) { - if (!g_path_is_absolute (cursor_font) || - !g_file_test (cursor_font, G_FILE_TEST_IS_REGULAR)) { - /* font file is not usable */ - g_free (cursor_font); - cursor_font = NULL; - } - } - - cursor_dir = setup_dir ("cursor-fonts", cursor_font != NULL); - - /* remove previously made symlinks, if any */ - if (cursor_dir) { - dir = opendir (cursor_dir); - while ((file_dirent = readdir (dir)) != NULL) { - struct stat st; - char *link_name; - - link_name = g_build_filename (cursor_dir, file_dirent->d_name, NULL); - if (lstat (link_name, &st)) { - g_free (link_name); - continue; - } - g_free (link_name); - - if (S_ISLNK (st.st_mode)) - unlink (link_name); - } - closedir (dir); - } - - if (cursor_font && cursor_dir) { - char *newpath; - char *font_name; - - font_name = strrchr (cursor_font, G_DIR_SEPARATOR); - newpath = g_build_filename (cursor_dir, font_name, NULL); - symlink (cursor_font, newpath); - g_free (newpath); - g_free (cursor_font); - cursor_font = NULL; - } else { - cursor_dir = empty_check_dir (cursor_dir); - } - - return cursor_dir; -} - -static void -load_font_paths (GSettings *settings) -{ - char *font_dir_name; - char *cursor_dir_name; - - char **font_path; - char **new_font_path; - int n_fonts; - int new_n_fonts; - - int i; - - const char *argv[4]; - int argc = 0; - - mate_settings_profile_start (NULL); - - font_dir_name = setup_font_dir (settings); - cursor_dir_name = setup_cursor_dir (settings); - - if (font_dir_name == NULL && cursor_dir_name == NULL) - goto done; - - /* run mkfontdir */ - argv[argc++] = "mkfontdir"; - if (font_dir_name) - argv[argc++] = font_dir_name; - if (cursor_dir_name) - argv[argc++] = cursor_dir_name; - argv[argc] = NULL; - g_spawn_sync (NULL, /* current dir */ - (char **) (void *) argv, NULL /* envp */, - G_SPAWN_SEARCH_PATH, - NULL, NULL, /* child_setup */ - NULL, NULL, NULL, NULL); - - /* Set the font path */ - font_path = XGetFontPath (gdk_x11_get_default_xdisplay (), &n_fonts); - new_n_fonts = n_fonts; - if (cursor_dir_name && (n_fonts == 0 || strcmp (font_path[0], cursor_dir_name))) - new_n_fonts++; - if (font_dir_name && (n_fonts == 0 || strcmp (font_path[n_fonts-1], font_dir_name))) - new_n_fonts++; - - if (new_n_fonts == n_fonts) - new_font_path = font_path; - else { - new_font_path = g_new0 (char *, new_n_fonts); - - if (cursor_dir_name && (n_fonts == 0 || strcmp (font_path[0], cursor_dir_name))) { - new_font_path[0] = cursor_dir_name; - for (i = 0; i < n_fonts; i++) - new_font_path [i+1] = font_path [i]; - } else { - for (i = 0; i < n_fonts; i++) - new_font_path [i] = font_path [i]; - } - - if (font_dir_name && (n_fonts == 0 || strcmp (font_path[n_fonts-1], font_dir_name))) { - new_font_path[new_n_fonts-1] = font_dir_name; - } - } - - /* We set font path even if it was not changed, to enforce dropping - * caches in the server */ - gdk_error_trap_push (); - XSetFontPath (gdk_display, new_font_path, new_n_fonts); - gdk_flush (); - - /* if there was an error setting the new path, revert */ - if (gdk_error_trap_pop ()) { - XSetFontPath (gdk_display, font_path, n_fonts); - } - - g_free (font_dir_name); - g_free (cursor_dir_name); - - if (new_font_path != font_path) - g_free (new_font_path); - - XFreeFontPath (font_path); - -done: - mate_settings_profile_end (NULL); -} - -gboolean -msd_font_manager_start (MsdFontManager *manager, - GError **error) -{ - GSettings *settings; - - g_debug ("Starting font manager"); - mate_settings_profile_start (NULL); - - settings = g_settings_new ("org.mate.peripherals-mouse"); - - load_xcursor_theme (settings); - load_font_paths (settings); - - g_object_unref (settings); - - mate_settings_profile_end (NULL); - - return TRUE; -} - -void -msd_font_manager_stop (MsdFontManager *manager) -{ - g_debug ("Stopping font manager"); -} - -static void -msd_font_manager_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - MsdFontManager *self; - - self = MSD_FONT_MANAGER (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -msd_font_manager_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - MsdFontManager *self; - - self = MSD_FONT_MANAGER (object); - - switch (prop_id) { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static GObject * -msd_font_manager_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties) -{ - MsdFontManager *font_manager; - MsdFontManagerClass *klass; - - klass = MSD_FONT_MANAGER_CLASS (g_type_class_peek (MSD_TYPE_FONT_MANAGER)); - - font_manager = MSD_FONT_MANAGER (G_OBJECT_CLASS (msd_font_manager_parent_class)->constructor (type, - n_construct_properties, - construct_properties)); - - return G_OBJECT (font_manager); -} - -static void -msd_font_manager_class_init (MsdFontManagerClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = msd_font_manager_get_property; - object_class->set_property = msd_font_manager_set_property; - object_class->constructor = msd_font_manager_constructor; -} - -static void -msd_font_manager_init (MsdFontManager *manager) -{ -} - -MsdFontManager * -msd_font_manager_new (void) -{ - if (manager_object != NULL) { - g_object_ref (manager_object); - } else { - manager_object = g_object_new (MSD_TYPE_FONT_MANAGER, NULL); - g_object_add_weak_pointer (manager_object, - (gpointer *) &manager_object); - } - - return MSD_FONT_MANAGER (manager_object); -} diff --git a/plugins/font/msd-font-manager.h b/plugins/font/msd-font-manager.h deleted file mode 100644 index 6a87baf..0000000 --- a/plugins/font/msd-font-manager.h +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <[email protected]> - * - * This program 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. - * - */ - -#ifndef __MSD_FONT_MANAGER_H -#define __MSD_FONT_MANAGER_H - -#include <glib-object.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define MSD_TYPE_FONT_MANAGER (msd_font_manager_get_type ()) -#define MSD_FONT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_FONT_MANAGER, MsdFontManager)) -#define MSD_FONT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_FONT_MANAGER, MsdFontManagerClass)) -#define MSD_IS_FONT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_FONT_MANAGER)) -#define MSD_IS_FONT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_FONT_MANAGER)) -#define MSD_FONT_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_FONT_MANAGER, MsdFontManagerClass)) - -typedef struct MsdFontManagerPrivate MsdFontManagerPrivate; - -typedef struct -{ - GObject parent; - MsdFontManagerPrivate *priv; -} MsdFontManager; - -typedef struct -{ - GObjectClass parent_class; -} MsdFontManagerClass; - -GType msd_font_manager_get_type (void); - -MsdFontManager * msd_font_manager_new (void); -gboolean msd_font_manager_start (MsdFontManager *manager, - GError **error); -void msd_font_manager_stop (MsdFontManager *manager); - -#ifdef __cplusplus -} -#endif - -#endif /* __MSD_FONT_MANAGER_H */ diff --git a/plugins/font/msd-font-plugin.c b/plugins/font/msd-font-plugin.c deleted file mode 100644 index b6a4452..0000000 --- a/plugins/font/msd-font-plugin.c +++ /dev/null @@ -1,104 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <[email protected]> - * - * This program 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, 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. - * - */ - -#include "config.h" - -#include <glib/gi18n-lib.h> -#include <gmodule.h> - -#include "mate-settings-plugin.h" -#include "msd-font-plugin.h" -#include "msd-font-manager.h" - -struct MsdFontPluginPrivate { - MsdFontManager *manager; -}; - -#define MSD_FONT_PLUGIN_GET_PRIVATE(object) (G_TYPE_INSTANCE_GET_PRIVATE ((object), MSD_TYPE_FONT_PLUGIN, MsdFontPluginPrivate)) - -MATE_SETTINGS_PLUGIN_REGISTER (MsdFontPlugin, msd_font_plugin) - -static void -msd_font_plugin_init (MsdFontPlugin *plugin) -{ - plugin->priv = MSD_FONT_PLUGIN_GET_PRIVATE (plugin); - - g_debug ("MsdFontPlugin initializing"); - - plugin->priv->manager = msd_font_manager_new (); -} - -static void -msd_font_plugin_finalize (GObject *object) -{ - MsdFontPlugin *plugin; - - g_return_if_fail (object != NULL); - g_return_if_fail (MSD_IS_FONT_PLUGIN (object)); - - g_debug ("MsdFontPlugin finalizing"); - - plugin = MSD_FONT_PLUGIN (object); - - g_return_if_fail (plugin->priv != NULL); - - if (plugin->priv->manager != NULL) { - g_object_unref (plugin->priv->manager); - } - - G_OBJECT_CLASS (msd_font_plugin_parent_class)->finalize (object); -} - -static void -impl_activate (MateSettingsPlugin *plugin) -{ - gboolean res; - GError *error; - - g_debug ("Activating font plugin"); - - error = NULL; - res = msd_font_manager_start (MSD_FONT_PLUGIN (plugin)->priv->manager, &error); - if (! res) { - g_warning ("Unable to start font manager: %s", error->message); - g_error_free (error); - } -} - -static void -impl_deactivate (MateSettingsPlugin *plugin) -{ - g_debug ("Deactivating font plugin"); - msd_font_manager_stop (MSD_FONT_PLUGIN (plugin)->priv->manager); -} - -static void -msd_font_plugin_class_init (MsdFontPluginClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - MateSettingsPluginClass *plugin_class = MATE_SETTINGS_PLUGIN_CLASS (klass); - - object_class->finalize = msd_font_plugin_finalize; - - plugin_class->activate = impl_activate; - plugin_class->deactivate = impl_deactivate; - - g_type_class_add_private (klass, sizeof (MsdFontPluginPrivate)); -} diff --git a/plugins/font/msd-font-plugin.h b/plugins/font/msd-font-plugin.h deleted file mode 100644 index ea6e775..0000000 --- a/plugins/font/msd-font-plugin.h +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <[email protected]> - * - * This program 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, 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. - * - */ - -#ifndef __MSD_FONT_PLUGIN_H__ -#define __MSD_FONT_PLUGIN_H__ - -#include <glib.h> -#include <glib-object.h> -#include <gmodule.h> - -#include "mate-settings-plugin.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MSD_TYPE_FONT_PLUGIN (msd_font_plugin_get_type ()) -#define MSD_FONT_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_TYPE_FONT_PLUGIN, MsdFontPlugin)) -#define MSD_FONT_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_TYPE_FONT_PLUGIN, MsdFontPluginClass)) -#define MSD_IS_FONT_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_TYPE_FONT_PLUGIN)) -#define MSD_IS_FONT_PLUGIN_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_TYPE_FONT_PLUGIN)) -#define MSD_FONT_PLUGIN_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_TYPE_FONT_PLUGIN, MsdFontPluginClass)) - -typedef struct MsdFontPluginPrivate MsdFontPluginPrivate; - -typedef struct -{ - MateSettingsPlugin parent; - MsdFontPluginPrivate *priv; -} MsdFontPlugin; - -typedef struct -{ - MateSettingsPluginClass parent_class; -} MsdFontPluginClass; - -GType msd_font_plugin_get_type (void) G_GNUC_CONST; - -/* All the plugins must implement this function */ -G_MODULE_EXPORT GType register_mate_settings_plugin (GTypeModule *module); - -#ifdef __cplusplus -} -#endif - -#endif /* __MSD_FONT_PLUGIN_H__ */ diff --git a/plugins/housekeeping/msd-disk-space.c b/plugins/housekeeping/msd-disk-space.c index f419658..3065b39 100644 --- a/plugins/housekeeping/msd-disk-space.c +++ b/plugins/housekeeping/msd-disk-space.c @@ -35,7 +35,6 @@ #include <gio/gunixmounts.h> #include <gio/gio.h> #include <gtk/gtk.h> -#include <gio/gio.h> #include "msd-disk-space.h" #include "msd-ldsm-dialog.h" diff --git a/plugins/housekeeping/msd-housekeeping-plugin.c b/plugins/housekeeping/msd-housekeeping-plugin.c index 9d5c407..40cd547 100644 --- a/plugins/housekeeping/msd-housekeeping-plugin.c +++ b/plugins/housekeeping/msd-housekeeping-plugin.c @@ -102,3 +102,9 @@ msd_housekeeping_plugin_class_init (MsdHousekeepingPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdHousekeepingPluginPrivate)); } + +static void +msd_housekeeping_plugin_class_finalize (MsdHousekeepingPluginClass *klass) +{ +} + diff --git a/plugins/housekeeping/msd-ldsm-trash-empty.c b/plugins/housekeeping/msd-ldsm-trash-empty.c index e218d6d..af01aa1 100644 --- a/plugins/housekeeping/msd-ldsm-trash-empty.c +++ b/plugins/housekeeping/msd-ldsm-trash-empty.c @@ -18,7 +18,6 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include <gio/gio.h> #include <glib/gi18n.h> #include <gio/gio.h> diff --git a/plugins/keyboard/Makefile.am b/plugins/keyboard/Makefile.am index 327ad7e..1d2c93e 100644 --- a/plugins/keyboard/Makefile.am +++ b/plugins/keyboard/Makefile.am @@ -13,9 +13,6 @@ icons_DATA = \ kbd-capslock-off.png kbd-numlock-off.png kbd-scrolllock-off.png \ kbd-capslock-on.png kbd-numlock-on.png kbd-scrolllock-on.png -uidir = $(pkgdatadir) -ui_DATA = modmap-dialog.ui - libkeyboard_la_SOURCES = \ msd-keyboard-plugin.h \ msd-keyboard-plugin.c \ @@ -23,8 +20,6 @@ libkeyboard_la_SOURCES = \ msd-keyboard-manager.c \ msd-keyboard-xkb.h \ msd-keyboard-xkb.c \ - msd-xmodmap.h \ - msd-xmodmap.c \ delayed-dialog.h \ delayed-dialog.c \ $(NULL) diff --git a/plugins/keyboard/modmap-dialog.ui b/plugins/keyboard/modmap-dialog.ui deleted file mode 100644 index 73d5a57..0000000 --- a/plugins/keyboard/modmap-dialog.ui +++ /dev/null @@ -1,257 +0,0 @@ -<?xml version="1.0"?> -<interface> - <!-- interface-requires gtk+ 2.6 --> - <!-- interface-naming-policy toplevel-contextual --> - <object class="GtkDialog" id="dialog1"> - <property name="visible">True</property> - <property name="title" translatable="yes">Load modmap files</property> - <property name="type_hint">dialog</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox4"> - <property name="visible">True</property> - <child> - <object class="GtkVBox" id="vbox44"> - <property name="visible">True</property> - <child> - <object class="GtkLabel" id="label62"> - <property name="visible">True</property> - <property name="label" translatable="yes">Would you like to load the modmap files?</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox32"> - <property name="visible">True</property> - <property name="border_width">12</property> - <property name="spacing">6</property> - <child> - <object class="GtkVBox" id="vbox45"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label63"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">_Loaded files:</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow7"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="treeview1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - </object> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox46"> - <property name="visible">True</property> - <property name="border_width">6</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label64"> - <property name="visible">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button7"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <child> - <object class="GtkAlignment" id="alignment1"> - <property name="visible">True</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <child> - <object class="GtkHBox" id="hbox33"> - <property name="visible">True</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label66"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Load</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="button6"> - <property name="label">gtk-remove</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox47"> - <property name="visible">True</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label65"> - <property name="visible">True</property> - <property name="xalign">0</property> - <property name="label" translatable="yes">A_vailable files:</property> - <property name="use_underline">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow8"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">automatic</property> - <property name="vscrollbar_policy">automatic</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="treeview2"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - </object> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="position">2</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area3"> - <property name="visible">True</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="helpbutton2"> - <property name="label">gtk-help</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="okbutton1"> - <property name="label">gtk-ok</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="receives_default">False</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="pack_type">end</property> - <property name="position">0</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-11">helpbutton2</action-widget> - <action-widget response="-5">okbutton1</action-widget> - </action-widgets> - </object> -</interface> diff --git a/plugins/keyboard/msd-keyboard-manager.c b/plugins/keyboard/msd-keyboard-manager.c index 293fb18..a4b97e5 100644 --- a/plugins/keyboard/msd-keyboard-manager.c +++ b/plugins/keyboard/msd-keyboard-manager.c @@ -50,7 +50,6 @@ #include "msd-keyboard-manager.h" #include "msd-keyboard-xkb.h" -#include "msd-xmodmap.h" #define MSD_KEYBOARD_MANAGER_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE((o), MSD_TYPE_KEYBOARD_MANAGER, MsdKeyboardManagerPrivate)) @@ -333,7 +332,6 @@ start_keyboard_idle_cb (MsdKeyboardManager *manager) manager->priv->settings = g_settings_new (MSD_KEYBOARD_SCHEMA); /* Essential - xkb initialization should happen before */ - msd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) msd_load_modmap_files, NULL); msd_keyboard_xkb_init (manager); #ifdef HAVE_X11_EXTENSIONS_XKB_H diff --git a/plugins/keyboard/msd-keyboard-plugin.c b/plugins/keyboard/msd-keyboard-plugin.c index 310c74c..97ad9ef 100644 --- a/plugins/keyboard/msd-keyboard-plugin.c +++ b/plugins/keyboard/msd-keyboard-plugin.c @@ -102,3 +102,9 @@ msd_keyboard_plugin_class_init (MsdKeyboardPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdKeyboardPluginPrivate)); } + +static void +msd_keyboard_plugin_class_finalize (MsdKeyboardPluginClass *klass) +{ +} + diff --git a/plugins/keyboard/msd-keyboard-xkb.c b/plugins/keyboard/msd-keyboard-xkb.c index 29cc066..d922210 100644 --- a/plugins/keyboard/msd-keyboard-xkb.c +++ b/plugins/keyboard/msd-keyboard-xkb.c @@ -37,7 +37,6 @@ #include <libmatekbd/matekbd-keyboard-config.h> #include <libmatekbd/matekbd-util.h> -#include "msd-xmodmap.h" #include "msd-keyboard-xkb.h" #include "delayed-dialog.h" #include "mate-settings-profile.h" @@ -501,88 +500,6 @@ msd_keyboard_xkb_analyze_sysconfig (void) NULL); } -static gboolean -msd_chk_file_list (void) -{ - GDir *home_dir; - const char *fname; - GSList *file_list = NULL; - GSList *last_login_file_list = NULL; - GSList *tmp = NULL; - GSList *tmp_l = NULL; - gboolean new_file_exist = FALSE; - - home_dir = g_dir_open (g_get_home_dir (), 0, NULL); - while ((fname = g_dir_read_name (home_dir)) != NULL) { - if (g_strrstr (fname, "modmap")) { - file_list = - g_slist_append (file_list, g_strdup (fname)); - } - } - g_dir_close (home_dir); - - gchar **settings_list; - settings_list = g_settings_get_strv (settings_desktop, KNOWN_FILES_KEY); - if (settings_list != NULL) { - gint i; - for (i = 0; i < G_N_ELEMENTS (settings_list); i++) { - if (settings_list[i] != NULL) - last_login_file_list = - g_slist_append (last_login_file_list, g_strdup (settings_list[i])); - } - g_strfreev (settings_list); - } - - /* Compare between the two file list, currently available modmap files - and the files available in the last log in */ - tmp = file_list; - while (tmp != NULL) { - tmp_l = last_login_file_list; - new_file_exist = TRUE; - while (tmp_l != NULL) { - if (strcmp (tmp->data, tmp_l->data) == 0) { - new_file_exist = FALSE; - break; - } else { - tmp_l = tmp_l->next; - } - } - if (new_file_exist) { - break; - } else { - tmp = tmp->next; - } - } - - if (new_file_exist) { - GSList *l; - GPtrArray *array = g_ptr_array_new (); - for (l = file_list; l != NULL; l = l->next) - g_ptr_array_add (array, l->data); - g_ptr_array_add (array, NULL); - g_settings_set_strv (settings_desktop, KNOWN_FILES_KEY, (const gchar **) array->pdata); - g_ptr_array_free (array, FALSE); - } - - g_slist_foreach (file_list, (GFunc) g_free, NULL); - g_slist_free (file_list); - - g_slist_foreach (last_login_file_list, (GFunc) g_free, NULL); - g_slist_free (last_login_file_list); - - return new_file_exist; - -} - -static void -msd_keyboard_xkb_chk_lcl_xmm (void) -{ - if (msd_chk_file_list ()) { - msd_modmap_dialog_call (); - } - msd_load_modmap_files (); -} - void msd_keyboard_xkb_set_post_activation_callback (PostActivationCallback fun, void *user_data) @@ -695,11 +612,6 @@ msd_keyboard_xkb_init (MsdKeyboardManager * kbd_manager) xkl_engine); xkl_engine_backup_names_prop (xkl_engine); msd_keyboard_xkb_analyze_sysconfig (); - mate_settings_profile_start - ("msd_keyboard_xkb_chk_lcl_xmm"); - msd_keyboard_xkb_chk_lcl_xmm (); - mate_settings_profile_end - ("msd_keyboard_xkb_chk_lcl_xmm"); g_signal_connect (settings_desktop, "changed", G_CALLBACK(apply_desktop_settings_cb), NULL); g_signal_connect (settings_kbd, "changed", G_CALLBACK(apply_xkb_settings_cb), NULL); diff --git a/plugins/keyboard/msd-xmodmap.c b/plugins/keyboard/msd-xmodmap.c deleted file mode 100644 index 5bea2da..0000000 --- a/plugins/keyboard/msd-xmodmap.c +++ /dev/null @@ -1,406 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright © 2005 Novell Inc. - * - * Written by Shakti Sen <[email protected]> - * - * This program 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, 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. - */ - -#include "config.h" - -#include <string.h> - -#include <glib.h> -#include <gtk/gtk.h> -#include <gio/gio.h> - -#include "msd-xmodmap.h" - -#define KEYBOARD_SCHEMA "org.mate.peripherals-keyboard-xkb.general" -#define LOADED_FILES_KEY "update-handlers" - -void -msd_load_modmap_files (void) -{ - GSettings *settings; - GSList *tmp = NULL; - GSList *loaded_file_list = NULL; - gchar **settings_list; - gint i; - - settings = g_settings_new (KEYBOARD_SCHEMA); - settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY); - - if (settings_list != NULL) { - for (i = 0; settings_list[i] != NULL; i++) { - loaded_file_list = - g_slist_append (loaded_file_list, g_strdup (settings_list[i])); - } - for (tmp = loaded_file_list; tmp != NULL; tmp = tmp->next) { - gchar *file; - gchar *command; - - file = g_build_filename (g_get_home_dir (), (gchar *) tmp->data, NULL); - command = g_strconcat ("xmodmap ", file, NULL); - g_free (file); - - g_spawn_command_line_async (command, NULL); - - g_free (command); - g_free (tmp->data); - } - g_strfreev (settings_list); - g_slist_free (loaded_file_list); - } - g_object_unref (settings); -} - -static void -response_callback (GtkWidget *dialog, - int id, - void *data) -{ - if (id == GTK_RESPONSE_OK) { - msd_load_modmap_files (); - } - gtk_widget_destroy (dialog); -} - -static void -get_selected_files_func (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer data) -{ - GSList **list = data; - gchar *filename; - - filename = NULL; - gtk_tree_model_get (model, - iter, - 0, - &filename, - -1); - - *list = g_slist_prepend (*list, filename); -} - -static GSList* -remove_string_from_list (GSList *list, - const char *str) -{ - GSList *tmp; - - for (tmp = list; tmp != NULL; tmp = tmp->next) { - if (strcmp (tmp->data, str) == 0) { - g_free (tmp->data); - list = g_slist_delete_link (list, tmp); - break; - } - } - - return list; -} - - -static void -remove_button_clicked_callback (GtkWidget *button, - void *data) -{ - GtkWidget *dialog; - GtkListStore *tree = NULL; - GtkTreeSelection *selection; - GtkWidget *treeview; - GSettings *settings; - GSList *filenames = NULL; - GSList *tmp = NULL; - GSList *loaded_files = NULL; - - dialog = data; - - treeview = g_object_get_data (G_OBJECT (dialog), "treeview1"); - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); - gtk_tree_selection_selected_foreach (selection, - get_selected_files_func, - &filenames); - - if (!filenames) - return; - - /* Remove the selected file */ - - settings = g_settings_new (KEYBOARD_SCHEMA); - - gchar **settings_list; - settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY); - if (settings_list != NULL) { - gint i; - for (i = 0; i < G_N_ELEMENTS (settings_list); i++) { - if (settings_list[i] != NULL) - loaded_files = - g_slist_append (loaded_files, g_strdup (settings_list[i])); - } - g_strfreev (settings_list); - } - - loaded_files = remove_string_from_list (loaded_files, (char *)filenames->data); - - GSList *l; - GPtrArray *array = g_ptr_array_new (); - for (l = loaded_files; l != NULL; l = l->next) - g_ptr_array_add (array, l->data); - g_ptr_array_add (array, NULL); - g_settings_set_strv (settings, LOADED_FILES_KEY, (const gchar **) array->pdata); - g_ptr_array_free (array, FALSE); - - g_object_unref (settings); - - tree = g_object_get_data (G_OBJECT (dialog), "tree"); - - gtk_list_store_clear (tree); - for (tmp = loaded_files; tmp != NULL; tmp = tmp->next) { - GtkTreeIter iter; - gtk_list_store_append (tree, &iter); - gtk_list_store_set (tree, &iter, - 0, - tmp->data, - -1); - } - - g_slist_foreach (loaded_files, (GFunc) g_free, NULL); - g_slist_free (loaded_files); -} - -static void -load_button_clicked_callback (GtkWidget *button, - void *data) -{ - GtkWidget *dialog; - GtkListStore *tree = NULL; - GtkTreeSelection *selection; - GtkWidget *treeview; - GSList *filenames = NULL; - GSList *tmp = NULL; - GSList *loaded_files = NULL; - GSettings *settings; - - dialog = data; - - treeview = g_object_get_data (G_OBJECT (dialog), - "loaded-treeview"); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); - gtk_tree_selection_selected_foreach (selection, - get_selected_files_func, - &filenames); - - if (!filenames) - return; - - /* Add the files to left-tree-view */ - settings = g_settings_new (KEYBOARD_SCHEMA); - - gchar **settings_list; - settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY); - if (settings_list != NULL) { - gint i; - for (i = 0; i < G_N_ELEMENTS (settings_list); i++) { - if (settings_list[i] != NULL) - loaded_files = - g_slist_append (loaded_files, g_strdup (settings_list[i])); - } - g_strfreev (settings_list); - } - - if (g_slist_find_custom (loaded_files, filenames->data, (GCompareFunc) strcmp)) { - g_free (filenames->data); - g_slist_free (filenames); - goto out; - } - - loaded_files = g_slist_append (loaded_files, filenames->data); - - GSList *l; - GPtrArray *array = g_ptr_array_new (); - for (l = loaded_files; l != NULL; l = l->next) - g_ptr_array_add (array, l->data); - g_ptr_array_add (array, NULL); - g_settings_set_strv (settings, LOADED_FILES_KEY, (const gchar **) array->pdata); - g_ptr_array_free (array, FALSE); - - tree = g_object_get_data (G_OBJECT (dialog), "tree"); - - gtk_list_store_clear (tree); - for (tmp = loaded_files; tmp != NULL; tmp = tmp->next) { - GtkTreeIter iter; - gtk_list_store_append (tree, &iter); - gtk_list_store_set (tree, &iter, - 0, - tmp->data, - -1); - } - -out: - g_object_unref (settings); - g_slist_foreach (loaded_files, (GFunc) g_free, NULL); - g_slist_free (loaded_files); -} - -void -msd_modmap_dialog_call (void) -{ - GtkBuilder *builder; - guint res; - GError *error; - GtkWidget *load_dialog; - GtkListStore *tree; - GtkCellRenderer *cell_renderer; - GtkTreeIter parent_iter; - GtkTreeIter iter; - GtkTreeModel *sort_model; - GtkTreeSelection *selection; - GtkWidget *treeview; - GtkWidget *treeview1; - GtkTreeViewColumn *column; - GtkWidget *add_button; - GtkWidget *remove_button; - GSList *tmp; - GDir *homeDir; - GSList *loaded_files; - const char *fname; - GSettings *settings; - - homeDir = g_dir_open (g_get_home_dir (), 0, NULL); - if (homeDir == NULL) - return; - - error = NULL; - builder = gtk_builder_new (); - res = gtk_builder_add_from_file (builder, - DATADIR "/modmap-dialog.ui", - &error); - - if (res == 0) { - g_warning ("Could not load UI file: %s", error->message); - g_error_free (error); - g_object_unref (builder); - g_dir_close (homeDir); - return; - } - - load_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "dialog1")); - gtk_window_set_modal (GTK_WINDOW (load_dialog), TRUE); - g_signal_connect (load_dialog, - "response", - G_CALLBACK (response_callback), - builder); - add_button = GTK_WIDGET (gtk_builder_get_object (builder, "button7")); - g_signal_connect (add_button, - "clicked", - G_CALLBACK (load_button_clicked_callback), - load_dialog); - remove_button = GTK_WIDGET (gtk_builder_get_object (builder, - "button6")); - g_signal_connect (remove_button, - "clicked", - G_CALLBACK (remove_button_clicked_callback), - load_dialog); - treeview = GTK_WIDGET (gtk_builder_get_object (builder, "treeview1")); - g_object_set_data (G_OBJECT (load_dialog), "treeview1", treeview); - treeview = GTK_WIDGET (gtk_builder_get_object (builder, "treeview2")); - g_object_set_data (G_OBJECT (load_dialog), "loaded-treeview", treeview); - tree = gtk_list_store_new (1, G_TYPE_STRING); - cell_renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("modmap", - cell_renderer, - "text", 0, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column); - gtk_tree_view_column_set_sort_column_id (column, 0); - - /* Add the data */ - while ((fname = g_dir_read_name (homeDir)) != NULL) { - if (g_strrstr (fname, "modmap")) { - gtk_list_store_append (tree, &parent_iter); - gtk_list_store_set (tree, &parent_iter, - 0, - fname, - -1); - } - } - sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree)); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model), - 0, - GTK_SORT_ASCENDING); - gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), sort_model); - g_object_unref (G_OBJECT (tree)); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); - gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection), - GTK_SELECTION_MULTIPLE); - gtk_widget_show (load_dialog); - - g_dir_close (homeDir); - - /* Left treeview */ - treeview1 = GTK_WIDGET (gtk_builder_get_object (builder, "treeview1")); - tree = gtk_list_store_new (1, G_TYPE_STRING); - cell_renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("modmap", - cell_renderer, - "text", 0, - NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (treeview1), column); - gtk_tree_view_column_set_sort_column_id (column, 0); - - settings = g_settings_new (KEYBOARD_SCHEMA); - - gchar **settings_list; - settings_list = g_settings_get_strv (settings, LOADED_FILES_KEY); - if (settings_list != NULL) { - gint i; - for (i = 0; i < G_N_ELEMENTS (settings_list); i++) { - if (settings_list[i] != NULL) - loaded_files = - g_slist_append (loaded_files, g_strdup (settings_list[i])); - } - g_strfreev (settings_list); - } - - /* Add the data */ - for (tmp = loaded_files; tmp != NULL; tmp = tmp->next) { - gtk_list_store_append (tree, &iter); - gtk_list_store_set (tree, &iter, - 0, - tmp->data, - -1); - } - - g_slist_foreach (loaded_files, (GFunc) g_free, NULL); - g_slist_free (loaded_files); - - sort_model = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (tree)); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sort_model), - 0, - GTK_SORT_ASCENDING); - gtk_tree_view_set_model (GTK_TREE_VIEW (treeview1), sort_model); - g_object_unref (G_OBJECT (tree)); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview1)); - gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection), - GTK_SELECTION_MULTIPLE); - g_object_set_data (G_OBJECT (load_dialog), "tree", tree); - g_object_unref (builder); -} diff --git a/plugins/keyboard/msd-xmodmap.h b/plugins/keyboard/msd-xmodmap.h deleted file mode 100644 index 4316edb..0000000 --- a/plugins/keyboard/msd-xmodmap.h +++ /dev/null @@ -1,29 +0,0 @@ -/* mate-settings-xmodmap.h - * - * Copyright © 2005 Novell Inc. - * - * Written by Shakti Sen <[email protected]> - * - * This program 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, 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. - */ - -#ifndef XMODMAP_H -#define XMODMAP_H - -void msd_load_modmap_files (void); -void msd_modmap_dialog_call (void); - -#endif diff --git a/plugins/media-keys/cut-n-paste/gvc-channel-map.c b/plugins/media-keys/cut-n-paste/gvc-channel-map.c index 6748d57..e35e793 100644 --- a/plugins/media-keys/cut-n-paste/gvc-channel-map.c +++ b/plugins/media-keys/cut-n-paste/gvc-channel-map.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> @@ -33,14 +33,6 @@ #define GVC_CHANNEL_MAP_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_CHANNEL_MAP, GvcChannelMapPrivate)) -#ifndef PA_CHECK_VERSION -#define PA_CHECK_VERSION(major,minor,micro) \ - ((PA_MAJOR > (major)) || \ - (PA_MAJOR == (major) && PA_MINOR > (minor)) || \ - (PA_MAJOR == (major) && PA_MINOR == (minor) && PA_MICRO >= (micro))) -#endif - - struct GvcChannelMapPrivate { pa_channel_map pa_map; @@ -49,7 +41,6 @@ struct GvcChannelMapPrivate gdouble extern_volume[NUM_TYPES]; /* volume, balance, fade, lfe */ gboolean can_balance; gboolean can_fade; - gboolean has_lfe; }; enum { @@ -65,46 +56,8 @@ static void gvc_channel_map_finalize (GObject *object); G_DEFINE_TYPE (GvcChannelMap, gvc_channel_map, G_TYPE_OBJECT) -/* FIXME remove when we depend on a newer PA */ -static int -gvc_pa_channel_map_has_position (const pa_channel_map *map, pa_channel_position_t p) { - unsigned c; - - g_return_val_if_fail(pa_channel_map_valid(map), 0); - g_return_val_if_fail(p < PA_CHANNEL_POSITION_MAX, 0); - - for (c = 0; c < map->channels; c++) - if (map->map[c] == p) - return 1; - - return 0; -} - -#if !PA_CHECK_VERSION(0,9,16) -/* The PulseAudio master increase version only when tagged, so let's avoid clashing with pa_ namespace */ -#define pa_cvolume_get_position gvc_cvolume_get_position -static pa_volume_t -gvc_cvolume_get_position (pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t) { - unsigned c; - pa_volume_t v = PA_VOLUME_MUTED; - - g_assert(cv); - g_assert(map); - - g_return_val_if_fail(pa_cvolume_compatible_with_channel_map(cv, map), PA_VOLUME_MUTED); - g_return_val_if_fail(t < PA_CHANNEL_POSITION_MAX, PA_VOLUME_MUTED); - - for (c = 0; c < map->channels; c++) - if (map->map[c] == t) - if (cv->values[c] > v) - v = cv->values[c]; - - return v; -} -#endif - guint -gvc_channel_map_get_num_channels (GvcChannelMap *map) +gvc_channel_map_get_num_channels (const GvcChannelMap *map) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), 0); @@ -140,7 +93,7 @@ gvc_channel_map_get_volume (GvcChannelMap *map) } gboolean -gvc_channel_map_can_balance (GvcChannelMap *map) +gvc_channel_map_can_balance (const GvcChannelMap *map) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE); @@ -148,7 +101,7 @@ gvc_channel_map_can_balance (GvcChannelMap *map) } gboolean -gvc_channel_map_can_fade (GvcChannelMap *map) +gvc_channel_map_can_fade (const GvcChannelMap *map) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE); @@ -156,7 +109,7 @@ gvc_channel_map_can_fade (GvcChannelMap *map) } const char * -gvc_channel_map_get_mapping (GvcChannelMap *map) +gvc_channel_map_get_mapping (const GvcChannelMap *map) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL); @@ -167,15 +120,16 @@ gvc_channel_map_get_mapping (GvcChannelMap *map) } gboolean -gvc_channel_map_has_lfe (GvcChannelMap *map) +gvc_channel_map_has_position (const GvcChannelMap *map, + pa_channel_position_t position) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), FALSE); - return map->priv->has_lfe; + return pa_channel_map_has_position (&(map->priv->pa_map), position); } const pa_channel_map * -gvc_channel_map_get_pa_channel_map (GvcChannelMap *map) +gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL); @@ -186,7 +140,7 @@ gvc_channel_map_get_pa_channel_map (GvcChannelMap *map) } const pa_cvolume * -gvc_channel_map_get_cvolume (GvcChannelMap *map) +gvc_channel_map_get_cvolume (const GvcChannelMap *map) { g_return_val_if_fail (GVC_IS_CHANNEL_MAP (map), NULL); @@ -274,7 +228,6 @@ set_from_pa_map (GvcChannelMap *map, map->priv->can_balance = pa_channel_map_can_balance (pa_map); map->priv->can_fade = pa_channel_map_can_fade (pa_map); - map->priv->has_lfe = gvc_pa_channel_map_has_position (pa_map, PA_CHANNEL_POSITION_LFE); map->priv->pa_map = *pa_map; pa_cvolume_set(&map->priv->pa_volume, pa_map->channels, PA_VOLUME_NORM); diff --git a/plugins/media-keys/cut-n-paste/gvc-channel-map.h b/plugins/media-keys/cut-n-paste/gvc-channel-map.h index be07df5..1d1ba4e 100644 --- a/plugins/media-keys/cut-n-paste/gvc-channel-map.h +++ b/plugins/media-keys/cut-n-paste/gvc-channel-map.h @@ -62,20 +62,22 @@ GType gvc_channel_map_get_type (void); GvcChannelMap * gvc_channel_map_new (void); GvcChannelMap * gvc_channel_map_new_from_pa_channel_map (const pa_channel_map *map); -guint gvc_channel_map_get_num_channels (GvcChannelMap *map); +guint gvc_channel_map_get_num_channels (const GvcChannelMap *map); const gdouble * gvc_channel_map_get_volume (GvcChannelMap *map); -gboolean gvc_channel_map_can_balance (GvcChannelMap *map); -gboolean gvc_channel_map_can_fade (GvcChannelMap *map); -gboolean gvc_channel_map_has_lfe (GvcChannelMap *map); +gboolean gvc_channel_map_can_balance (const GvcChannelMap *map); +gboolean gvc_channel_map_can_fade (const GvcChannelMap *map); +gboolean gvc_channel_map_has_position (const GvcChannelMap *map, + pa_channel_position_t position); +#define gvc_channel_map_has_lfe(x) gvc_channel_map_has_position (x, PA_CHANNEL_POSITION_LFE) void gvc_channel_map_volume_changed (GvcChannelMap *map, const pa_cvolume *cv, gboolean set); -const char * gvc_channel_map_get_mapping (GvcChannelMap *map); +const char * gvc_channel_map_get_mapping (const GvcChannelMap *map); /* private */ -const pa_cvolume * gvc_channel_map_get_cvolume (GvcChannelMap *map); -const pa_channel_map * gvc_channel_map_get_pa_channel_map (GvcChannelMap *map); +const pa_cvolume * gvc_channel_map_get_cvolume (const GvcChannelMap *map); +const pa_channel_map * gvc_channel_map_get_pa_channel_map (const GvcChannelMap *map); #ifdef __cplusplus } #endif diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-card.c b/plugins/media-keys/cut-n-paste/gvc-mixer-card.c index 25c77c0..91bdf19 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-card.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-card.c @@ -26,7 +26,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> @@ -47,6 +47,7 @@ struct GvcMixerCardPrivate char *target_profile; char *human_profile; GList *profiles; + pa_operation *profile_op; }; enum @@ -209,6 +210,9 @@ _pa_context_set_card_profile_by_index_cb (pa_context *cont } g_free (card->priv->target_profile); card->priv->target_profile = NULL; + + pa_operation_unref (card->priv->profile_op); + card->priv->profile_op = NULL; } gboolean @@ -223,25 +227,26 @@ gvc_mixer_card_change_profile (GvcMixerCard *card, return TRUE; if (g_strcmp0 (profile, card->priv->target_profile) == 0) return TRUE; + if (card->priv->profile_op != NULL) { + pa_operation_cancel (card->priv->profile_op); + pa_operation_unref (card->priv->profile_op); + card->priv->profile_op = NULL; + } if (card->priv->profile != NULL) { - pa_operation *o; - g_free (card->priv->target_profile); card->priv->target_profile = g_strdup (profile); - o = pa_context_set_card_profile_by_index (card->priv->pa_context, - card->priv->index, - card->priv->target_profile, - _pa_context_set_card_profile_by_index_cb, - card); + card->priv->profile_op = pa_context_set_card_profile_by_index (card->priv->pa_context, + card->priv->index, + card->priv->target_profile, + _pa_context_set_card_profile_by_index_cb, + card); - if (o == NULL) { + if (card->priv->profile_op == NULL) { g_warning ("pa_context_set_card_profile_by_index() failed"); return FALSE; } - - pa_operation_unref (o); } else { g_assert (card->priv->human_profile == NULL); card->priv->profile = g_strdup (profile); diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-card.h b/plugins/media-keys/cut-n-paste/gvc-mixer-card.h index 7a19110..54a85e2 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-card.h +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-card.h @@ -56,6 +56,7 @@ typedef struct char *human_profile; char *status; guint priority; + guint n_sinks, n_sources; } GvcMixerCardProfile; GType gvc_mixer_card_get_type (void); diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c b/plugins/media-keys/cut-n-paste/gvc-mixer-control.c index 2fed2e1..7f4532c 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-control.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-control.c @@ -27,7 +27,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> #include <pulse/glib-mainloop.h> @@ -448,6 +448,10 @@ _set_default_source (GvcMixerControl *control, if (stream == NULL) { control->priv->default_source_id = 0; control->priv->default_source_is_set = FALSE; + g_signal_emit (control, + signals[DEFAULT_SOURCE_CHANGED], + 0, + PA_INVALID_INDEX); return; } @@ -470,8 +474,16 @@ _set_default_sink (GvcMixerControl *control, guint new_id; if (stream == NULL) { + /* Don't tell front-ends about an unset default + * sink if it's already unset */ + if (control->priv->default_sink_is_set == FALSE) + return; control->priv->default_sink_id = 0; control->priv->default_sink_is_set = FALSE; + g_signal_emit (control, + signals[DEFAULT_SINK_CHANGED], + 0, + PA_INVALID_INDEX); return; } @@ -480,7 +492,6 @@ _set_default_sink (GvcMixerControl *control, if (control->priv->default_sink_id != new_id) { control->priv->default_sink_id = new_id; control->priv->default_sink_is_set = TRUE; - g_signal_emit (control, signals[DEFAULT_SINK_CHANGED], 0, @@ -672,11 +683,13 @@ update_sink (GvcMixerControl *control, max_volume = pa_cvolume_max (&info->volume); gvc_mixer_stream_set_name (stream, info->name); + gvc_mixer_stream_set_card_index (stream, info->card); gvc_mixer_stream_set_description (stream, info->description); gvc_mixer_stream_set_icon_name (stream, "audio-card"); gvc_mixer_stream_set_volume (stream, (guint)max_volume); gvc_mixer_stream_set_is_muted (stream, info->mute); gvc_mixer_stream_set_can_decibel (stream, !!(info->flags & PA_SINK_DECIBEL_VOLUME)); + gvc_mixer_stream_set_base_volume (stream, (guint32) info->base_volume); #if PA_MICRO > 15 if (info->active_port != NULL) gvc_mixer_stream_set_port (stream, info->active_port->name); @@ -696,7 +709,7 @@ update_sink (GvcMixerControl *control, } if (map == NULL) - map = gvc_mixer_stream_get_channel_map (stream); + map = (GvcChannelMap *) gvc_mixer_stream_get_channel_map (stream); gvc_channel_map_volume_changed (map, &info->volume, FALSE); } @@ -759,6 +772,7 @@ update_source (GvcMixerControl *control, max_volume = pa_cvolume_max (&info->volume); gvc_mixer_stream_set_name (stream, info->name); + gvc_mixer_stream_set_card_index (stream, info->card); gvc_mixer_stream_set_description (stream, info->description); gvc_mixer_stream_set_icon_name (stream, "audio-input-microphone"); gvc_mixer_stream_set_volume (stream, (guint)max_volume); @@ -1064,6 +1078,8 @@ update_card (GvcMixerControl *control, profile->profile = g_strdup (pi.name); profile->human_profile = g_strdup (pi.description); profile->status = card_num_streams_to_status (pi.n_sinks, pi.n_sources); + profile->n_sinks = pi.n_sinks; + profile->n_sources = pi.n_sources; profile->priority = pi.priority; list = g_list_prepend (list, profile); } @@ -1328,6 +1344,17 @@ _pa_ext_stream_restore_read_cb (pa_context *context, if (eol > 0) { dec_outstanding (control); + /* If we don't have an event stream to restore, then + * set one up with a default 100% volume */ + if (!control->priv->event_sink_input_is_set) { + pa_ext_stream_restore_info info; + + memset (&info, 0, sizeof(info)); + info.name = "sink-input-by-media-role:event"; + info.volume.channels = 1; + info.volume.values[0] = PA_VOLUME_NORM; + update_event_role_stream (control, &info); + } return; } diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c b/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c index a2d1169..594f951 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-event-role.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> #include <pulse/ext-stream-restore.h> @@ -58,7 +58,7 @@ update_settings (GvcMixerEventRole *role, { pa_operation *o; guint index; - GvcChannelMap *map; + const GvcChannelMap *map; pa_context *context; pa_ext_stream_restore_info info; @@ -87,8 +87,8 @@ update_settings (GvcMixerEventRole *role, return FALSE; } - if (op != NULL) - *op = o; + if (op != NULL) + *op = o; return TRUE; } diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c b/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c index 9dec302..1f4a06b 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-sink-input.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> @@ -48,12 +48,12 @@ G_DEFINE_TYPE (GvcMixerSinkInput, gvc_mixer_sink_input, GVC_TYPE_MIXER_STREAM) static gboolean gvc_mixer_sink_input_push_volume (GvcMixerStream *stream, gpointer *op) { - pa_operation *o; - guint index; - GvcChannelMap *map; - pa_context *context; - const pa_cvolume *cv; - guint num_channels; + pa_operation *o; + guint index; + const GvcChannelMap *map; + pa_context *context; + const pa_cvolume *cv; + guint num_channels; index = gvc_mixer_stream_get_index (stream); diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c b/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c index ffccc8b..3ab7924 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-sink.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> @@ -48,11 +48,11 @@ G_DEFINE_TYPE (GvcMixerSink, gvc_mixer_sink, GVC_TYPE_MIXER_STREAM) static gboolean gvc_mixer_sink_push_volume (GvcMixerStream *stream, gpointer *op) { - pa_operation *o; - guint index; - GvcChannelMap *map; - pa_context *context; - const pa_cvolume *cv; + pa_operation *o; + guint index; + const GvcChannelMap *map; + pa_context *context; + const pa_cvolume *cv; index = gvc_mixer_stream_get_index (stream); @@ -133,7 +133,7 @@ gvc_mixer_sink_change_port (GvcMixerStream *stream, return TRUE; #else - return FALSE; + return FALSE; #endif /* PA_MICRO > 15 */ } diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c b/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c index ec1efd9..7b63221 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-source-output.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-source.c b/plugins/media-keys/cut-n-paste/gvc-mixer-source.c index 83b8afc..bc51f08 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-source.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-source.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> @@ -48,11 +48,11 @@ G_DEFINE_TYPE (GvcMixerSource, gvc_mixer_source, GVC_TYPE_MIXER_STREAM) static gboolean gvc_mixer_source_push_volume (GvcMixerStream *stream, gpointer *op) { - pa_operation *o; - guint index; - GvcChannelMap *map; - pa_context *context; - const pa_cvolume *cv; + pa_operation *o; + guint index; + const GvcChannelMap *map; + pa_context *context; + const pa_cvolume *cv; index = gvc_mixer_stream_get_index (stream); @@ -133,7 +133,7 @@ gvc_mixer_source_change_port (GvcMixerStream *stream, return TRUE; #else - return FALSE; + return FALSE; #endif /* PA_MICRO > 15 */ } diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c index 7b08828..7b1e0ec 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.c @@ -25,7 +25,7 @@ #include <unistd.h> #include <glib.h> -#include <glib/gi18n.h> +#include <glib/gi18n-lib.h> #include <pulse/pulseaudio.h> @@ -40,6 +40,7 @@ struct GvcMixerStreamPrivate pa_context *pa_context; guint id; guint index; + gint card_index; GvcChannelMap *channel_map; char *name; char *description; @@ -73,6 +74,7 @@ enum PROP_CAN_DECIBEL, PROP_IS_EVENT_STREAM, PROP_IS_VIRTUAL, + PROP_CARD_INDEX, PROP_PORT, }; @@ -117,7 +119,7 @@ gvc_mixer_stream_get_id (GvcMixerStream *stream) return stream->priv->id; } -GvcChannelMap * +const GvcChannelMap * gvc_mixer_stream_get_channel_map (GvcMixerStream *stream) { g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), NULL); @@ -403,7 +405,7 @@ gvc_mixer_stream_set_base_volume (GvcMixerStream *stream, return TRUE; } -GvcMixerStreamPort * +const GvcMixerStreamPort * gvc_mixer_stream_get_port (GvcMixerStream *stream) { GList *l; @@ -489,6 +491,25 @@ gvc_mixer_stream_set_ports (GvcMixerStream *stream, return TRUE; } +gint +gvc_mixer_stream_get_card_index (GvcMixerStream *stream) +{ + g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), PA_INVALID_INDEX); + return stream->priv->card_index; +} + +gboolean +gvc_mixer_stream_set_card_index (GvcMixerStream *stream, + gint card_index) +{ + g_return_val_if_fail (GVC_IS_MIXER_STREAM (stream), FALSE); + + stream->priv->card_index = card_index; + g_object_notify (G_OBJECT (stream), "card-index"); + + return TRUE; +} + static void gvc_mixer_stream_set_property (GObject *object, guint prop_id, @@ -543,6 +564,9 @@ gvc_mixer_stream_set_property (GObject *object, case PROP_PORT: gvc_mixer_stream_set_port (self, g_value_get_string (value)); break; + case PROP_CARD_INDEX: + self->priv->card_index = g_value_get_long (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -605,6 +629,9 @@ gvc_mixer_stream_get_property (GObject *object, case PROP_PORT: g_value_set_string (value, self->priv->port); break; + case PROP_CARD_INDEX: + g_value_set_long (value, self->priv->card_index); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -815,6 +842,13 @@ gvc_mixer_stream_class_init (GvcMixerStreamClass *klass) "The name of the current port for this stream", NULL, G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, + PROP_CARD_INDEX, + g_param_spec_long ("card-index", + "Card index", + "The index of the card for this stream", + PA_INVALID_INDEX, G_MAXLONG, PA_INVALID_INDEX, + G_PARAM_READWRITE|G_PARAM_CONSTRUCT)); g_type_class_add_private (klass, sizeof (GvcMixerStreamPrivate)); } @@ -844,6 +878,9 @@ gvc_mixer_stream_finalize (GObject *object) g_return_if_fail (mixer_stream->priv != NULL); + g_object_unref (mixer_stream->priv->channel_map); + mixer_stream->priv->channel_map = NULL; + g_free (mixer_stream->priv->name); mixer_stream->priv->name = NULL; diff --git a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h index 6f7eab3..e818505 100644 --- a/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h +++ b/plugins/media-keys/cut-n-paste/gvc-mixer-stream.h @@ -70,8 +70,8 @@ GType gvc_mixer_stream_get_type (void); pa_context * gvc_mixer_stream_get_pa_context (GvcMixerStream *stream); guint gvc_mixer_stream_get_index (GvcMixerStream *stream); guint gvc_mixer_stream_get_id (GvcMixerStream *stream); -GvcChannelMap * gvc_mixer_stream_get_channel_map (GvcMixerStream *stream); -GvcMixerStreamPort *gvc_mixer_stream_get_port (GvcMixerStream *stream); +const GvcChannelMap *gvc_mixer_stream_get_channel_map(GvcMixerStream *stream); +const GvcMixerStreamPort *gvc_mixer_stream_get_port (GvcMixerStream *stream); const GList * gvc_mixer_stream_get_ports (GvcMixerStream *stream); gboolean gvc_mixer_stream_change_port (GvcMixerStream *stream, const char *port); @@ -92,6 +92,7 @@ const char * gvc_mixer_stream_get_description (GvcMixerStream *stream); const char * gvc_mixer_stream_get_application_id (GvcMixerStream *stream); gboolean gvc_mixer_stream_is_event_stream (GvcMixerStream *stream); gboolean gvc_mixer_stream_is_virtual (GvcMixerStream *stream); +gint gvc_mixer_stream_get_card_index (GvcMixerStream *stream); /* private */ gboolean gvc_mixer_stream_set_volume (GvcMixerStream *stream, @@ -120,6 +121,8 @@ gboolean gvc_mixer_stream_set_port (GvcMixerStream *stream, const char *port); gboolean gvc_mixer_stream_set_ports (GvcMixerStream *stream, GList *ports); +gboolean gvc_mixer_stream_set_card_index (GvcMixerStream *stream, + gint card_index); #ifdef __cplusplus } diff --git a/plugins/media-keys/msd-media-keys-plugin.c b/plugins/media-keys/msd-media-keys-plugin.c index 4d297bb..93a805f 100644 --- a/plugins/media-keys/msd-media-keys-plugin.c +++ b/plugins/media-keys/msd-media-keys-plugin.c @@ -102,3 +102,9 @@ msd_media_keys_plugin_class_init (MsdMediaKeysPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdMediaKeysPluginPrivate)); } + +static void +msd_media_keys_plugin_class_finalize (MsdMediaKeysPluginClass *klass) +{ +} + diff --git a/plugins/mouse/msd-mouse-plugin.c b/plugins/mouse/msd-mouse-plugin.c index 9bd3d1b..19b96d7 100644 --- a/plugins/mouse/msd-mouse-plugin.c +++ b/plugins/mouse/msd-mouse-plugin.c @@ -102,3 +102,9 @@ msd_mouse_plugin_class_init (MsdMousePluginClass *klass) g_type_class_add_private (klass, sizeof (MsdMousePluginPrivate)); } + +static void +msd_mouse_plugin_class_finalize (MsdMousePluginClass *klass) +{ +} + diff --git a/plugins/smartcard/msd-smartcard-manager.c b/plugins/smartcard/msd-smartcard-manager.c index 8207613..503123a 100644 --- a/plugins/smartcard/msd-smartcard-manager.c +++ b/plugins/smartcard/msd-smartcard-manager.c @@ -1321,7 +1321,7 @@ on_device_removed (MsdSmartcardManager *manager, } else { g_print ("disabling manager for 2 seconds\n"); msd_smartcard_manager_stop (manager); - g_timeout_add (2000, (GSourceFunc) on_timeout, manager); + g_timeout_add_seconds (2, (GSourceFunc) on_timeout, manager); } } diff --git a/plugins/smartcard/msd-smartcard-plugin.c b/plugins/smartcard/msd-smartcard-plugin.c index 08f6e6c..ae1b264 100644 --- a/plugins/smartcard/msd-smartcard-plugin.c +++ b/plugins/smartcard/msd-smartcard-plugin.c @@ -338,3 +338,9 @@ msd_smartcard_plugin_class_init (MsdSmartcardPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdSmartcardPluginPrivate)); } + +static void +msd_smartcard_plugin_class_finalize (MsdSmartcardPluginClass *klass) +{ +} + diff --git a/plugins/sound/msd-sound-plugin.c b/plugins/sound/msd-sound-plugin.c index ac31450..f0e0a1e 100644 --- a/plugins/sound/msd-sound-plugin.c +++ b/plugins/sound/msd-sound-plugin.c @@ -98,3 +98,9 @@ msd_sound_plugin_class_init (MsdSoundPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdSoundPluginPrivate)); } + +static void +msd_sound_plugin_class_finalize (MsdSoundPluginClass *klass) +{ +} + diff --git a/plugins/typing-break/msd-typing-break-plugin.c b/plugins/typing-break/msd-typing-break-plugin.c index f0d3580..3b5770b 100644 --- a/plugins/typing-break/msd-typing-break-plugin.c +++ b/plugins/typing-break/msd-typing-break-plugin.c @@ -102,3 +102,8 @@ msd_typing_break_plugin_class_init (MsdTypingBreakPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdTypingBreakPluginPrivate)); } + +static void +msd_typing_break_plugin_class_finalize (MsdTypingBreakPluginClass *klass) +{ +} diff --git a/plugins/xrandr/msd-xrandr-plugin.c b/plugins/xrandr/msd-xrandr-plugin.c index e87baea..7680a0a 100644 --- a/plugins/xrandr/msd-xrandr-plugin.c +++ b/plugins/xrandr/msd-xrandr-plugin.c @@ -102,3 +102,9 @@ msd_xrandr_plugin_class_init (MsdXrandrPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdXrandrPluginPrivate)); } + +static void +msd_xrandr_plugin_class_finalize (MsdXrandrPluginClass *klass) +{ +} + diff --git a/plugins/xrdb/msd-xrdb-plugin.c b/plugins/xrdb/msd-xrdb-plugin.c index 1506523..6c79c57 100644 --- a/plugins/xrdb/msd-xrdb-plugin.c +++ b/plugins/xrdb/msd-xrdb-plugin.c @@ -102,3 +102,9 @@ msd_xrdb_plugin_class_init (MsdXrdbPluginClass *klass) g_type_class_add_private (klass, sizeof (MsdXrdbPluginPrivate)); } + +static void +msd_xrdb_plugin_class_finalize (MsdXrdbPluginClass *klass) +{ +} + diff --git a/plugins/xsettings/msd-xsettings-manager.c b/plugins/xsettings/msd-xsettings-manager.c index e045711..f8291f4 100644 --- a/plugins/xsettings/msd-xsettings-manager.c +++ b/plugins/xsettings/msd-xsettings-manager.c @@ -659,7 +659,7 @@ gboolean mate_xsettings_manager_start (MateXSettingsManager *manager, GError **error) { - int i; + guint i; GList *list, *l; g_debug ("Starting xsettings manager"); @@ -689,6 +689,11 @@ mate_xsettings_manager_start (MateXSettingsManager *manager, gsettings = g_hash_table_lookup (manager->priv->gsettings, translations[i].gsettings_schema); + if (gsettings == NULL) { + g_warning ("Schemas '%s' has not been setup", translations[i].gsettings_schema); + continue; + } + val = g_settings_get_value (gsettings, translations[i].gsettings_key); process_value (manager, &translations[i], val); @@ -697,7 +702,8 @@ mate_xsettings_manager_start (MateXSettingsManager *manager, list = g_hash_table_get_values (manager->priv->gsettings); for (l = list; l != NULL; l = l->next) { - g_signal_connect_object (G_OBJECT (l->data), "changed", G_CALLBACK (xsettings_callback), manager, 0); + g_signal_connect_object (G_OBJECT (l->data), "changed", + G_CALLBACK (xsettings_callback), manager, 0); } g_list_free (list); diff --git a/plugins/xsettings/msd-xsettings-plugin.c b/plugins/xsettings/msd-xsettings-plugin.c index 6449264..faa7068 100644 --- a/plugins/xsettings/msd-xsettings-plugin.c +++ b/plugins/xsettings/msd-xsettings-plugin.c @@ -102,3 +102,8 @@ mate_xsettings_plugin_class_init (MateXSettingsPluginClass *klass) g_type_class_add_private (klass, sizeof (MateXSettingsPluginPrivate)); } + +static void +mate_xsettings_plugin_class_finalize (MateXSettingsPluginClass *klass) +{ +} |