Thu Feb 13 18:51:37 2003 Jonathan Blandford <jrb@redhat.com> * capplets/common/gconf-property-editor.c: (gconf_peditor_new): * capplets/common/gnome-theme-info.c: (read_meta_theme), (update_theme_index), (update_common_theme_dir_index), (top_theme_dir_changed), (top_icon_theme_dir_changed), (add_common_theme_dir_monitor), (real_add_top_theme_dir_monitor): * capplets/default-applications/gnome-default-applications-properti es.c: (initialize_default_applications), (read_editor), (read_terminal): * capplets/file-types/mime-edit-dialog.c: (fill_dialog): * capplets/file-types/mime-type-info.c: (load_all_mime_types): * capplets/file-types/mime-types-model.c: (mime_types_model_get_value): * capplets/font/main.c: (font_render_get_gconf), (enum_group_load): * capplets/mouse/gnome-mouse-properties.c: (read_cursor_font), (cursor_changed): * capplets/theme-switcher/gnome-theme-details.c: (window_theme_selection_changed): * capplets/theme-switcher/gnome-theme-manager.c: (meta_theme_selection_changed): * capplets/theme-switcher/theme-thumbnail.c: (generate_theme_thumbnail): * libsounds/sound-properties.c: (sound_properties_add_directory), (sound_properties_add_file): * libsounds/sound-view.c: (compare_func): * libwindow-settings/gnome-window-manager.c: (gnome_window_manager_new): Patch from Kjartan Maraas to fix a bunch of leaks.
238 lines
7 KiB
C
238 lines
7 KiB
C
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
|
|
|
/* gnome-window-manager.h
|
|
* Copyright (C) 2002 Seth Nickell
|
|
* Copyright (C) 2002 Red Hat, Inc.
|
|
*
|
|
* Written by: Seth Nickell <snickell@stanford.edu>,
|
|
* Havoc Pennington <hp@redhat.com>
|
|
*
|
|
* 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., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*/
|
|
|
|
#include "gnome-window-manager.h"
|
|
|
|
#include <gmodule.h>
|
|
|
|
static GObjectClass *parent_class;
|
|
|
|
struct _GnomeWindowManagerPrivate {
|
|
char *window_manager_name;
|
|
GnomeDesktopItem *ditem;
|
|
};
|
|
|
|
GObject *
|
|
gnome_window_manager_new (GnomeDesktopItem *it)
|
|
{
|
|
const char *settings_lib;
|
|
char *module_name;
|
|
GnomeWindowManagerNewFunc wm_new_func = NULL;
|
|
GObject *wm;
|
|
GModule *module;
|
|
gboolean success;
|
|
|
|
settings_lib = gnome_desktop_item_get_string (it, "X-GNOME-WMSettingsModule");
|
|
|
|
module_name = g_module_build_path (GNOME_WINDOW_MANAGER_MODULE_PATH,
|
|
settings_lib);
|
|
|
|
module = g_module_open (module_name, G_MODULE_BIND_LAZY);
|
|
if (module == NULL) {
|
|
g_warning ("Couldn't load window manager settings module `%s' (%s)", module_name, g_module_error ());
|
|
g_free (module_name);
|
|
return NULL;
|
|
}
|
|
|
|
success = g_module_symbol (module, "window_manager_new",
|
|
(gpointer *) &wm_new_func);
|
|
|
|
if ((!success) || wm_new_func == NULL) {
|
|
g_warning ("Couldn't load window manager settings module `%s`, couldn't find symbol \'window_manager_new\'", module_name);
|
|
g_free (module_name);
|
|
return NULL;
|
|
}
|
|
|
|
g_free (module_name);
|
|
|
|
wm = (* wm_new_func) (GNOME_WINDOW_MANAGER_INTERFACE_VERSION);
|
|
|
|
if (wm == NULL)
|
|
return NULL;
|
|
|
|
(GNOME_WINDOW_MANAGER (wm))->p->window_manager_name = g_strdup (gnome_desktop_item_get_string (it, GNOME_DESKTOP_ITEM_NAME));
|
|
(GNOME_WINDOW_MANAGER (wm))->p->ditem = gnome_desktop_item_ref (it);
|
|
|
|
return wm;
|
|
}
|
|
|
|
const char *
|
|
gnome_window_manager_get_name (GnomeWindowManager *wm)
|
|
{
|
|
return wm->p->window_manager_name;
|
|
}
|
|
|
|
GnomeDesktopItem *
|
|
gnome_window_manager_get_ditem (GnomeWindowManager *wm)
|
|
{
|
|
return gnome_desktop_item_ref (wm->p->ditem);
|
|
}
|
|
|
|
GList *
|
|
gnome_window_manager_get_theme_list (GnomeWindowManager *wm)
|
|
{
|
|
GnomeWindowManagerClass *klass = GNOME_WINDOW_MANAGER_GET_CLASS (wm);
|
|
if (klass->get_theme_list)
|
|
return klass->get_theme_list (wm);
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
char *
|
|
gnome_window_manager_get_user_theme_folder (GnomeWindowManager *wm)
|
|
{
|
|
GnomeWindowManagerClass *klass = GNOME_WINDOW_MANAGER_GET_CLASS (wm);
|
|
if (klass->get_user_theme_folder)
|
|
return klass->get_user_theme_folder (wm);
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
void
|
|
gnome_window_manager_get_double_click_actions (GnomeWindowManager *wm,
|
|
const GnomeWMDoubleClickAction **actions,
|
|
int *n_actions)
|
|
{
|
|
GnomeWindowManagerClass *klass = GNOME_WINDOW_MANAGER_GET_CLASS (wm);
|
|
|
|
*actions = NULL;
|
|
*n_actions = 0;
|
|
|
|
if (klass->get_double_click_actions)
|
|
klass->get_double_click_actions (wm, actions, n_actions);
|
|
}
|
|
|
|
void
|
|
gnome_window_manager_change_settings (GnomeWindowManager *wm,
|
|
const GnomeWMSettings *settings)
|
|
{
|
|
GnomeWindowManagerClass *klass = GNOME_WINDOW_MANAGER_GET_CLASS (wm);
|
|
|
|
(* klass->change_settings) (wm, settings);
|
|
}
|
|
|
|
void
|
|
gnome_window_manager_get_settings (GnomeWindowManager *wm,
|
|
GnomeWMSettings *settings)
|
|
{
|
|
GnomeWindowManagerClass *klass = GNOME_WINDOW_MANAGER_GET_CLASS (wm);
|
|
int mask;
|
|
|
|
mask = (* klass->get_settings_mask) (wm);
|
|
settings->flags &= mask; /* avoid back compat issues by not returning
|
|
* fields to the caller that the WM module
|
|
* doesn't know about
|
|
*/
|
|
|
|
(* klass->get_settings) (wm, settings);
|
|
}
|
|
|
|
static void
|
|
gnome_window_manager_init (GnomeWindowManager *gnome_window_manager, GnomeWindowManagerClass *class)
|
|
{
|
|
gnome_window_manager->p = g_new0 (GnomeWindowManagerPrivate, 1);
|
|
}
|
|
|
|
static void
|
|
gnome_window_manager_finalize (GObject *object)
|
|
{
|
|
GnomeWindowManager *gnome_window_manager;
|
|
|
|
g_return_if_fail (object != NULL);
|
|
g_return_if_fail (IS_GNOME_WINDOW_MANAGER (object));
|
|
|
|
gnome_window_manager = GNOME_WINDOW_MANAGER (object);
|
|
|
|
g_free (gnome_window_manager->p);
|
|
|
|
parent_class->finalize (object);
|
|
}
|
|
|
|
enum {
|
|
SETTINGS_CHANGED,
|
|
LAST_SIGNAL
|
|
};
|
|
|
|
static guint signals[LAST_SIGNAL] = { 0 };
|
|
|
|
static void
|
|
gnome_window_manager_class_init (GnomeWindowManagerClass *class)
|
|
{
|
|
GObjectClass *object_class;
|
|
GnomeWindowManagerClass *wm_class;
|
|
|
|
object_class = G_OBJECT_CLASS (class);
|
|
wm_class = GNOME_WINDOW_MANAGER_CLASS (class);
|
|
|
|
object_class->finalize = gnome_window_manager_finalize;
|
|
|
|
parent_class = g_type_class_peek_parent (class);
|
|
|
|
|
|
signals[SETTINGS_CHANGED] =
|
|
g_signal_new ("settings_changed",
|
|
G_OBJECT_CLASS_TYPE (class),
|
|
G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
|
|
G_STRUCT_OFFSET (GnomeWindowManagerClass, settings_changed),
|
|
NULL, NULL,
|
|
g_cclosure_marshal_VOID__VOID,
|
|
G_TYPE_NONE, 0);
|
|
}
|
|
|
|
|
|
GType
|
|
gnome_window_manager_get_type (void)
|
|
{
|
|
static GType gnome_window_manager_type = 0;
|
|
|
|
if (!gnome_window_manager_type) {
|
|
static GTypeInfo gnome_window_manager_info = {
|
|
sizeof (GnomeWindowManagerClass),
|
|
NULL, /* GBaseInitFunc */
|
|
NULL, /* GBaseFinalizeFunc */
|
|
(GClassInitFunc) gnome_window_manager_class_init,
|
|
NULL, /* GClassFinalizeFunc */
|
|
NULL, /* user-supplied data */
|
|
sizeof (GnomeWindowManager),
|
|
0, /* n_preallocs */
|
|
(GInstanceInitFunc) gnome_window_manager_init,
|
|
NULL
|
|
};
|
|
|
|
gnome_window_manager_type =
|
|
g_type_register_static (G_TYPE_OBJECT,
|
|
"GnomeWindowManager",
|
|
&gnome_window_manager_info, 0);
|
|
}
|
|
|
|
return gnome_window_manager_type;
|
|
}
|
|
|
|
|
|
void
|
|
gnome_window_manager_settings_changed (GnomeWindowManager *wm)
|
|
{
|
|
g_signal_emit (wm, signals[SETTINGS_CHANGED], 0);
|
|
}
|