diff --git a/ChangeLog b/ChangeLog index 88bbe761f..782522269 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2007-04-30 Thomas Wood + + * capplets/appearance/Makefile.am: + * capplets/appearance/appearance-main.c: + * capplets/appearance/appearance-themes.c: + * capplets/appearance/appearance-themes.h: + * capplets/appearance/appearance.glade: + * capplets/appearance/appearance.h: + + Add some code for a new appearance capplet + 2007-04-25 Jens Granseuer * configure.in: diff --git a/capplets/appearance/Makefile.am b/capplets/appearance/Makefile.am new file mode 100644 index 000000000..0881b5d4a --- /dev/null +++ b/capplets/appearance/Makefile.am @@ -0,0 +1,26 @@ +bin_PROGRAMS=gnome-appearance-properties + +gnome_appearance_properties_SOURCES= \ + appearance.h \ + appearance-main.c \ + appearance-themes.c \ + appearance-themes.h + +gnome_appearance_properties_LDADD = \ + $(GNOMECC_CAPPLETS_LIBS) \ + $(METACITY_LIBS) \ + $(top_builddir)/libwindow-settings/libgnome-window-settings.la \ + $(top_builddir)/capplets/common/libcommon.la + +gladedir = $(pkgdatadir)/glade +glade_DATA = appearance.glade + +INCLUDES = \ + -I$(top_srcdir) \ + $(METACITY_CFLAGS) \ + $(GNOMECC_CAPPLETS_CFLAGS) \ + -DGLADEDIR=\""$(gladedir)"\" \ + -DGNOMELOCALEDIR="\"$(datadir)/locale\"" \ + -DGNOMECC_DATA_DIR="\"$(pkgdatadir)\"" + +EXTRA_DIST = $(glade_DATA) diff --git a/capplets/appearance/appearance-main.c b/capplets/appearance/appearance-main.c new file mode 100644 index 000000000..95c0af2ea --- /dev/null +++ b/capplets/appearance/appearance-main.c @@ -0,0 +1,57 @@ +#include "appearance.h" +#include "appearance-themes.h" +#include "theme-thumbnail.h" +#include "activate-settings-daemon.h" + +/* required for gnome_program_init(): */ +#include +#include +/* ---------------------------------- */ + +#define VERSION "0.0" + +int +main (int argc, char **argv) +{ + AppearanceData *data; + GtkWidget *w; + GnomeProgram *program; + + /* init */ + theme_thumbnail_factory_init (argc, argv); + gtk_init (&argc, &argv); + gnome_vfs_init (); + activate_settings_daemon (); + + /* set up the data */ + data = g_new0 (AppearanceData, 1); + data->xml = glade_xml_new (GLADEDIR "appearance.glade", NULL, NULL); + data->argc = argc; + data->argv = argv; + + /* this appears to be required for gnome_wm_manager_init (), which is called + * inside gnome_meta_theme_set (); + * TODO: try to remove if possible + */ + program = gnome_program_init ("appearance", VERSION, + LIBGNOMEUI_MODULE, argc, argv, + GNOME_PARAM_APP_DATADIR, GNOMECC_DATA_DIR, + NULL); + + /* init tabs */ + themes_init (data); + + w = WID ("appearance_window"); + gtk_widget_show_all (w); + g_signal_connect (G_OBJECT (w), "delete-event", (GCallback) gtk_main_quit, NULL); + + + gtk_main (); + + + + /* free stuff */ + g_free (data); + + return 0; +} diff --git a/capplets/appearance/appearance-themes.c b/capplets/appearance/appearance-themes.c new file mode 100644 index 000000000..8d2669dc3 --- /dev/null +++ b/capplets/appearance/appearance-themes.c @@ -0,0 +1,112 @@ +#include "appearance.h" +#include "gnome-theme-info.h" +#include "theme-thumbnail.h" +#include "gnome-theme-apply.h" +#include + +enum { + THEME_NAME_COLUMN, + THEME_PIXBUF_COLUMN, +}; + +/* Theme functions */ +void theme_changed_func (gpointer uri, AppearanceData *data); + +/* GUI Callbacks */ +void theme_save_cb (GtkWidget *button, AppearanceData *data); +void theme_open_cb (GtkWidget *button, AppearanceData *data); +void theme_delete_cb (GtkWidget *button, AppearanceData *data); +void theme_activated_cb (GtkWidget *icon_view, GtkTreePath *path, AppearanceData *data); + +void +themes_init (AppearanceData *data) +{ + GtkWidget *w; + GList *theme_list, *l; + GtkListStore *theme_store; + + /* initialise some stuff */ + gnome_theme_init (NULL); + gnome_wm_manager_init (); + + /* connect button signals */ + g_signal_connect (G_OBJECT (WID ("theme_save")), "clicked", (GCallback) theme_save_cb, data); + g_signal_connect (G_OBJECT (WID ("theme_open")), "clicked", (GCallback) theme_open_cb, data); + g_signal_connect (G_OBJECT (WID ("theme_delete")), "clicked", (GCallback) theme_delete_cb, data); + + /* connect theme list signals */ + g_signal_connect (G_OBJECT (WID ("theme_list")), "item-activated", (GCallback) theme_activated_cb, data); + + /* set up theme list */ + theme_store = gtk_list_store_new (2, G_TYPE_STRING, GDK_TYPE_PIXBUF); + + /* Temporary measure to fill the themes list. + * This should be replace with asynchronous calls. + */ + theme_list = gnome_theme_meta_info_find_all (); + gnome_theme_info_register_theme_change ((GFunc)theme_changed_func, data); + for (l = theme_list; l; l = g_list_next (l)) + { + gchar *name = ((GnomeThemeMetaInfo *)l->data)->name; + if (name) + { + GdkPixbuf *pixbuf = generate_theme_thumbnail (l->data, TRUE); + gtk_list_store_insert_with_values (theme_store, NULL, 0, + THEME_NAME_COLUMN, name, + THEME_PIXBUF_COLUMN, pixbuf, + -1); + } + } + + w = WID ("theme_list"); + gtk_icon_view_set_model (GTK_ICON_VIEW (w), GTK_TREE_MODEL (theme_store)); + +} + +/** Theme Callbacks **/ + +void +theme_changed_func (gpointer uri, AppearanceData *data) +{ + /* TODO: add/change/remove themes from the model as appropriate */ +} + + +/** GUI Callbacks **/ + +void +theme_activated_cb (GtkWidget *icon_view, GtkTreePath *path, AppearanceData *data) +{ + GtkTreeModel *model; + GtkTreeIter iter; + GnomeThemeMetaInfo *theme = NULL; + gchar *name; + + model = gtk_icon_view_get_model (GTK_ICON_VIEW (icon_view)); + gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get (model, &iter, THEME_NAME_COLUMN, &name, -1); + + theme = gnome_theme_meta_info_find (name); + if (theme) + gnome_meta_theme_set (theme); + g_free (theme); + g_free (name); +} + +void +theme_save_cb (GtkWidget *button, AppearanceData *data) +{ + /* TODO: Save the current settings as a new theme */ +} + +void +theme_open_cb (GtkWidget *button, AppearanceData *data) +{ + /* TODO: Install a new theme */ +} + +void +theme_delete_cb (GtkWidget *button, AppearanceData *data) +{ + /* TODO: Delete the selected theme */ +} diff --git a/capplets/appearance/appearance-themes.h b/capplets/appearance/appearance-themes.h new file mode 100644 index 000000000..18e652dd1 --- /dev/null +++ b/capplets/appearance/appearance-themes.h @@ -0,0 +1,2 @@ +void themes_init (AppearanceData *data); + diff --git a/capplets/appearance/appearance.glade b/capplets/appearance/appearance.glade new file mode 100644 index 000000000..c41b64281 --- /dev/null +++ b/capplets/appearance/appearance.glade @@ -0,0 +1,1603 @@ + + + + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Appearance Preferences + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + 6 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + gtk-dialog-info + 5 + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Themes are collections of appearance, font and desktop options. + True + True + + + False + 1 + + + + + False + 6 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_POLICY_NEVER + GTK_SHADOW_IN + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 1 + 0 + + + + + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 6 + GTK_BUTTONBOX_SPREAD + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + gtk-save + True + + + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + gtk-open + True + + + 1 + + + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + gtk-delete + True + + + 2 + + + + + False + 2 + + + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Themes + + + tab + False + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + <b>Style</b> + True + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 6 + 4 + 2 + 6 + 6 + + + True + + + 1 + 2 + 2 + 3 + GTK_EXPAND + + + + + True + + + 1 + 2 + 1 + 2 + + + + + True + + + 1 + 2 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Icons: + + + 2 + 3 + GTK_EXPAND + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Window Borders: + + + 1 + 2 + GTK_EXPAND + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Controls: + + + GTK_FILL + + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + Cursor: + + + 3 + 4 + + + + + True + + + 1 + 2 + 3 + 4 + + + + + False + 1 + + + + + True + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + <b>Colours</b> + True + + + False + + + + + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + True + 12 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + gtk-dialog-info + + + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + The currently selected controls theme doesn't support colour schemes + True + + + 1 + + + + + False + 12 + 1 + + + + + True + 12 + 4 + 3 + 12 + 12 + + + + + + True + 0 + _Input boxes: + True + + + 2 + 3 + GTK_FILL + + + + + + True + 0 + _Selected items: + True + + + 3 + 4 + GTK_FILL + + + + + + True + 0 + _Windows: + True + + + 1 + 2 + GTK_FILL + + + + + + True + Text + + + 2 + 3 + GTK_FILL + + + + + + True + True + + + 1 + 2 + 2 + 3 + + + + + + + True + True + + + 1 + 2 + 3 + 4 + + + + + + + True + True + + + 2 + 3 + 2 + 3 + + + + + + + True + True + + + 2 + 3 + 3 + 4 + + + + + + + True + True + + + 2 + 3 + 1 + 2 + + + + + + + True + True + + + 1 + 2 + 1 + 2 + + + + + + + True + Background + True + + + 1 + 2 + GTK_FILL + GTK_FILL + + + + + 2 + + + + + True + GTK_BUTTONBOX_END + + + True + True + True + gtk-revert-to-saved + True + + + + + False + False + 3 + + + + + 12 + 2 + + + + + 1 + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Appearance + + + tab + 1 + False + False + + + + + True + 12 + 18 + + + True + 5 + 2 + 12 + 6 + + + True + 0 + _Application font: + True + GTK_JUSTIFY_RIGHT + + + GTK_FILL + + + + + + True + True + True + + + 1 + 2 + + + + + + True + 0 + _Fixed width font: + True + GTK_JUSTIFY_RIGHT + + + 4 + 5 + GTK_FILL + + + + + + True + 0 + _Window title font: + True + GTK_JUSTIFY_RIGHT + + + 3 + 4 + GTK_FILL + + + + + + True + 0 + Des_ktop font: + True + GTK_JUSTIFY_RIGHT + + + 2 + 3 + GTK_FILL + + + + + + True + True + True + + + 1 + 2 + 4 + 5 + GTK_FILL + + + + + + True + True + True + + + 1 + 2 + 3 + 4 + GTK_FILL + + + + + + True + True + True + + + 1 + 2 + 2 + 3 + GTK_FILL + + + + + + True + 0 + _Document font: + True + + + 1 + 2 + GTK_FILL + + + + + + True + True + True + + + 1 + 2 + 1 + 2 + GTK_FILL + + + + + + False + + + + + True + 6 + + + True + 0 + <b>Rendering</b> + True + + + False + False + + + + + True + 12 + + + True + 2 + 2 + 12 + 6 + + + True + 6 + + + True + True + _Monochrome + True + True + + + False + False + + + + + True + + + True + + + + + 1 + + + + + + + True + 6 + + + True + True + Best _shapes + True + True + + + False + False + + + + + True + + + True + + + + + 1 + + + + + 1 + 2 + + + + + True + 6 + + + True + True + Best co_ntrast + True + True + + + False + False + + + + + True + + + True + + + + + 1 + + + + + 1 + 2 + + + + + True + 6 + + + True + True + Sub_pixel smoothing (LCDs) + True + True + + + False + False + + + + + True + + + True + + + + + 1 + + + + + 1 + 2 + 1 + 2 + + + + + + + 1 + + + + + 1 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + GTK_BUTTONBOX_END + + + True + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + D_etails... + True + + + + + 2 + + + + + 2 + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Fonts + + + tab + 2 + False + False + + + + + True + 12 + 6 + + + True + 0 + <b>_Wallpaper</b> + True + True + + + False + False + + + + + True + 6 + + + True + + + False + False + + + + + True + + + False + False + 1 + + + + + True + 6 + + + True + 6 + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + + + True + True + False + + + + + + + + + True + 6 + + + True + _Style: + True + + + False + False + + + + + True + True + Zoom + + + False + False + 1 + + + + + True + True + _Add Wallpaper + True + + + False + False + GTK_PACK_END + 3 + + + + + True + True + _Remove + True + + + False + False + GTK_PACK_END + 2 + + + + + False + False + 1 + + + + + 2 + + + + + 1 + + + + + True + + + False + False + 2 + + + + + True + 0 + <b>_Colors</b> + True + True + + + False + False + 3 + + + + + True + 6 + + + True + + + False + False + + + + + True + + + False + False + 1 + + + + + True + True + Solid Colour + + + False + False + 2 + + + + + True + True + + Open a dialog to specify the color + + + + False + False + 3 + + + + + True + + Open a dialog to specify the color + + + + False + False + 4 + + + + + False + False + 4 + + + + + 3 + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Desktop + + + tab + 3 + False + False + + + + + True + 12 + 18 + + + True + 6 + + + True + 0 + <b>Menus and Toolbars</b> + True + + + False + False + + + + + True + + + True + + + + False + False + + + + + True + 6 + + + True + True + Show _icons in menus + True + True + True + + + False + False + + + + + True + True + Show icons in buttons + True + True + True + + + False + False + 1 + + + + + True + True + _Editable menu shortcut keys + True + True + + + False + False + 2 + + + + + True + 12 + + + 150 + True + Toolbar Icon Size: + True + GTK_JUSTIFY_CENTER + + + False + False + + + + + True + True + Small + + + False + False + 1 + + + + + False + False + 3 + + + + + True + 12 + + + 150 + True + Toolbar _button labels: + True + GTK_JUSTIFY_CENTER + + + False + False + + + + + True + True + Icons and Text + + + False + False + 1 + + + + + False + False + 4 + + + + + False + False + 1 + + + + + False + False + 1 + + + + + False + + + + + True + 6 + + + True + 0 + <b>Preview</b> + True + + + False + False + + + + + True + + + True + + + + False + False + + + + + True + + + True + + + True + _File + True + + + + + True + _New + True + + + True + gtk-new + 1 + + + + + + + True + _Open + True + + + True + gtk-open + 1 + + + + + + + True + _Save + True + + + True + gtk-save + 1 + + + + + + + True + + + + + True + _Print + True + + + True + gtk-print + 1 + + + + + + + True + + + + + True + _Quit + True + + + True + gtk-quit + 1 + + + + + + + + + + + True + _Edit + True + + + + + True + C_ut + True + + + True + gtk-cut + 1 + + + + + + + True + _Copy + True + + + True + gtk-copy + 1 + + + + + + + True + _Paste + True + + + True + gtk-paste + 1 + + + + + + + + + + + False + False + + + + + True + + + True + GTK_SHADOW_OUT + + + True + GTK_TOOLBAR_BOTH + + + True + New File + True + gtk-new + + + False + + + + + True + Open File + gtk-open + + + False + + + + + True + Save File + gtk-save + + + False + + + + + + + + + False + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 4 + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Preferences + + + tab + 4 + False + False + + + + + + diff --git a/capplets/appearance/appearance.h b/capplets/appearance/appearance.h new file mode 100644 index 000000000..ec818da17 --- /dev/null +++ b/capplets/appearance/appearance.h @@ -0,0 +1,11 @@ +#include +#include +#include + +#define WID(x) (glade_xml_get_widget (data->xml, x)) + +typedef struct { + int argc; + char **argv; + GladeXML *xml; +} AppearanceData;