diff options
author | Jean-François Wauthy <pollux@xfce.org> | 2004-09-25 15:32:01 +0000 |
---|---|---|
committer | Jean-François Wauthy <pollux@xfce.org> | 2004-09-25 15:32:01 +0000 |
commit | 33805819c7fd0207ed1be7fc7a7005b005a89faa (patch) | |
tree | f19ed791f208738be68653643f2dc5b64aafaae1 /mcs-plugin | |
parent | 30e0fdeacfa2edc7786e40a91f751693d129e648 (diff) | |
download | xfwm4-33805819c7fd0207ed1be7fc7a7005b005a89faa.tar.gz |
fix shortcut editor, Default is no more editable, user can create his
own themes
(Old svn revision: 11981)
Diffstat (limited to 'mcs-plugin')
-rw-r--r-- | mcs-plugin/xfwm4_plugin.c | 16 | ||||
-rw-r--r-- | mcs-plugin/xfwm4_plugin.h | 8 | ||||
-rw-r--r-- | mcs-plugin/xfwm4_shortcuteditor.c | 211 | ||||
-rw-r--r-- | mcs-plugin/xfwm4_shortcuteditor.h | 1 |
4 files changed, 191 insertions, 45 deletions
diff --git a/mcs-plugin/xfwm4_plugin.c b/mcs-plugin/xfwm4_plugin.c index 40c861e58..420c24abf 100644 --- a/mcs-plugin/xfwm4_plugin.c +++ b/mcs-plugin/xfwm4_plugin.c @@ -97,20 +97,12 @@ MenuTmpl title_align_values[] = { {NULL, NULL} }; -enum -{ - THEME_NAME_COLUMN, - N_COLUMNS -}; - static void xfwm4_create_channel (McsPlugin * mcs_plugin); -static gboolean write_options (McsPlugin * mcs_plugin); static void run_dialog (McsPlugin * mcs_plugin); static gboolean setting_model = FALSE; static gboolean is_running = FALSE; static gchar *current_theme = NULL; -gchar *current_key_theme = NULL; static gchar *current_layout = NULL; static gchar *current_font = NULL; static gchar *dbl_click_action = NULL; @@ -128,10 +120,13 @@ static gboolean box_resize = FALSE; static int raise_delay; static int snap_width; static int wrap_resistance; +gchar *current_key_theme = NULL; static GList *decoration_theme_list = NULL; GList *keybinding_theme_list = NULL; + + static void sensitive_cb (GtkWidget * widget, gpointer user_data) { @@ -672,7 +667,7 @@ create_option_menu_box (MenuTmpl template[], guint size, gchar * display_label, return (vbox); } -static void +void theme_info_free (ThemeInfo * info) { g_free (info->path); @@ -1822,6 +1817,7 @@ setup_dialog (Itf * itf) g_signal_connect (G_OBJECT (itf->treeview2), "button-press-event", G_CALLBACK (cb_popup_menu), itf); g_signal_connect (G_OBJECT (itf->popup_add_menuitem), "activate", G_CALLBACK (cb_popup_add_menu), itf); + g_signal_connect (G_OBJECT (itf->popup_del_menuitem), "activate", G_CALLBACK (cb_popup_del_menu), itf); g_signal_connect (G_OBJECT (itf->treeview3), "row-activated", G_CALLBACK (cb_activate_treeview3), itf); g_signal_connect (G_OBJECT (itf->treeview4), "row-activated", G_CALLBACK (cb_activate_treeview4), itf); @@ -2167,7 +2163,7 @@ xfwm4_create_channel (McsPlugin * mcs_plugin) write_options (mcs_plugin); } -static gboolean +gboolean write_options (McsPlugin * mcs_plugin) { gchar *rcfile, *path; diff --git a/mcs-plugin/xfwm4_plugin.h b/mcs-plugin/xfwm4_plugin.h index 4706aaaa6..ee8ac6041 100644 --- a/mcs-plugin/xfwm4_plugin.h +++ b/mcs-plugin/xfwm4_plugin.h @@ -119,6 +119,12 @@ struct _Itf enum { + THEME_NAME_COLUMN, + N_COLUMNS +}; + +enum +{ COLUMN_COMMAND, COLUMN_SHORTCUT, NUM_COLUMNS @@ -134,6 +140,8 @@ ThemeType; extern gchar *current_key_theme; extern GList *keybinding_theme_list; +extern gboolean write_options (McsPlugin *); +extern void theme_info_free (ThemeInfo *); extern ThemeInfo *find_theme_info_by_name (const gchar *, GList *); extern GList *read_themes (GList *, GtkWidget *, GtkWidget *, ThemeType, gchar *); #endif diff --git a/mcs-plugin/xfwm4_shortcuteditor.c b/mcs-plugin/xfwm4_shortcuteditor.c index 1dabd66e0..801d3ff1d 100644 --- a/mcs-plugin/xfwm4_shortcuteditor.c +++ b/mcs-plugin/xfwm4_shortcuteditor.c @@ -36,6 +36,63 @@ /* Popup menu */ /**************/ void +cb_popup_del_menu (GtkWidget *widget, gpointer data) +{ + Itf *itf; + + itf = (Itf *) data; + + if (xfce_confirm (_("Do you really want to remove this keybinding theme ?"), GTK_STOCK_YES, NULL)) + { + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + ThemeInfo *ti; + + gchar *theme_name = NULL; + gchar *theme_file = NULL; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (itf->treeview2)); + + gtk_tree_selection_get_selected (selection, &model, &iter); + gtk_tree_model_get (model, &iter, THEME_NAME_COLUMN, &theme_name, -1); + + ti = find_theme_info_by_name (theme_name, keybinding_theme_list); + + theme_file = g_build_filename (ti->path, KEY_SUFFIX, KEYTHEMERC, NULL); + + if (unlink (theme_file) == 0) + { + /* refresh list */ + while (keybinding_theme_list) + { + theme_info_free ((ThemeInfo *)keybinding_theme_list->data); + keybinding_theme_list = g_list_next (keybinding_theme_list); + } + g_list_free (keybinding_theme_list); + + g_free (current_key_theme); + current_key_theme = g_strdup ("Default"); + keybinding_theme_list = NULL; + keybinding_theme_list = read_themes (keybinding_theme_list, itf->treeview2, itf->scrolledwindow2, + KEYBINDING_THEMES, current_key_theme); + gtk_widget_set_sensitive (itf->treeview3, FALSE); + gtk_widget_set_sensitive (itf->treeview4, FALSE); + loadtheme_in_treeview (find_theme_info_by_name ("Default", keybinding_theme_list), itf); + + /* tell it to the mcs manager */ + mcs_manager_set_string (itf->mcs_plugin->manager, "Xfwm/KeyThemeName", CHANNEL, current_key_theme); + mcs_manager_notify (itf->mcs_plugin->manager, CHANNEL); + write_options (itf->mcs_plugin); + + } + + g_free (theme_name); + g_free (theme_file); + } +} + +void cb_popup_add_menu (GtkWidget *widget, gpointer data) { Itf *itf; @@ -45,11 +102,14 @@ cb_popup_add_menu (GtkWidget *widget, gpointer data) GtkWidget *entry; GtkWidget *header_image; GtkWidget *header; - gint response = GTK_RESPONSE_CANCEL; + + gchar *default_theme_file = NULL; + gchar *new_theme_path = NULL; + gchar *new_theme_file = NULL; itf = (Itf *) data; - dialog = gtk_dialog_new_with_buttons (_("Enter a name"), GTK_WINDOW (itf->xfwm4_dialog), + dialog = gtk_dialog_new_with_buttons (_("Add keybinding theme"), GTK_WINDOW (itf->xfwm4_dialog), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); @@ -68,47 +128,89 @@ cb_popup_add_menu (GtkWidget *widget, gpointer data) gtk_container_set_border_width (GTK_CONTAINER (hbox), 10); gtk_widget_show_all (dialog); - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - if (response == GTK_RESPONSE_OK) + while (TRUE) { - gchar *default_theme_file = NULL; - gchar *new_theme_path = NULL; - gchar *new_theme_file = NULL; - gchar buf[80]; - FILE *new_theme; - FILE *default_theme; - - /* create theme (copy default) */ - new_theme_path = g_strdup_printf ("%s/xfwm4/%s", gtk_entry_get_text (GTK_ENTRY (entry)), KEYTHEMERC); - new_theme_file = xfce_resource_save_location (XFCE_RESOURCE_THEMES, new_theme_path, TRUE); - default_theme_file = g_build_filename (DATADIR, G_DIR_SEPARATOR_S, "themes", G_DIR_SEPARATOR_S, "Default", - G_DIR_SEPARATOR_S, KEY_SUFFIX, G_DIR_SEPARATOR_S KEYTHEMERC, NULL); + gint response = GTK_RESPONSE_CANCEL; - //TODO check if everything is ok - new_theme = fopen (new_theme_file, "w+"); - default_theme = fopen (default_theme_file, "r"); + response = gtk_dialog_run (GTK_DIALOG (dialog)); - while (fgets (buf, sizeof (buf), default_theme)) + if (response == GTK_RESPONSE_OK) { - fputs (buf, new_theme); - } + gchar buf[80]; + FILE *new_theme; + FILE *default_theme; - fclose (new_theme); - fclose (default_theme); - - //TODO refresh list - //FIXME g_list_free (keybinding_theme_list); + if (find_theme_info_by_name (gtk_entry_get_text (GTK_ENTRY (entry)), keybinding_theme_list)) + { + xfce_err (_("A keybinding theme with the same name already exists")); + continue; + } - keybinding_theme_list = read_themes (keybinding_theme_list, itf->treeview2, itf->scrolledwindow2, - KEYBINDING_THEMES, current_key_theme); - g_free (new_theme_path); - g_free (new_theme_file); - g_free (default_theme_file); + if (strlen (gtk_entry_get_text (GTK_ENTRY (entry))) == 0) + { + xfce_err (_("You have to provide a name for the keybinding theme")); + continue; + } - } + /* create theme (copy default) */ + new_theme_path = g_strdup_printf ("%s/xfwm4/%s", gtk_entry_get_text (GTK_ENTRY (entry)), KEYTHEMERC); + new_theme_file = xfce_resource_save_location (XFCE_RESOURCE_THEMES, new_theme_path, TRUE); + default_theme_file = g_build_filename (DATADIR, G_DIR_SEPARATOR_S, "themes", G_DIR_SEPARATOR_S, "Default", + G_DIR_SEPARATOR_S, KEY_SUFFIX, G_DIR_SEPARATOR_S KEYTHEMERC, NULL); + + new_theme = fopen (new_theme_file, "w+"); + if (!new_theme) + { + g_warning ("unable to create the new theme file"); + break; + } + + default_theme = fopen (default_theme_file, "r"); + if (!default_theme) + { + g_warning ("unable to open the default theme file"); + fclose (new_theme); + break; + } + + while (fgets (buf, sizeof (buf), default_theme)) + { + fputs (buf, new_theme); + } + + fclose (new_theme); + fclose (default_theme); + + /* refresh list */ + while (keybinding_theme_list) + { + theme_info_free ((ThemeInfo *)keybinding_theme_list->data); + keybinding_theme_list = g_list_next (keybinding_theme_list); + } + g_list_free (keybinding_theme_list); + + g_free (current_key_theme); + current_key_theme = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); + keybinding_theme_list = NULL; + keybinding_theme_list = read_themes (keybinding_theme_list, itf->treeview2, itf->scrolledwindow2, + KEYBINDING_THEMES, current_key_theme); + gtk_widget_set_sensitive (itf->treeview3, TRUE); + gtk_widget_set_sensitive (itf->treeview4, TRUE); + loadtheme_in_treeview (find_theme_info_by_name (gtk_entry_get_text (GTK_ENTRY (entry)), + keybinding_theme_list), itf); + /* tell it to the mcs manager */ + mcs_manager_set_string (itf->mcs_plugin->manager, "Xfwm/KeyThemeName", CHANNEL, current_key_theme); + mcs_manager_notify (itf->mcs_plugin->manager, CHANNEL); + write_options (itf->mcs_plugin); + } + break; + } + gtk_widget_destroy (dialog); + g_free (new_theme_path); + g_free (new_theme_file); + g_free (default_theme_file); } gboolean @@ -295,6 +397,26 @@ loadtheme_in_treeview (ThemeInfo *ti, gpointer data) gtk_list_store_append (GTK_LIST_STORE (model3), &iter); gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Toggle fullscreen"), COLUMN_SHORTCUT, entry_value, -1); } + else if (g_ascii_strcasecmp (*shortcut, "up_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Upper workspace"), COLUMN_SHORTCUT, entry_value, -1); + } + else if (g_ascii_strcasecmp (*shortcut, "down_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Bottom workspace"), COLUMN_SHORTCUT, entry_value, -1); + } + else if (g_ascii_strcasecmp (*shortcut, "left_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Left workspace"), COLUMN_SHORTCUT, entry_value, -1); + } + else if (g_ascii_strcasecmp (*shortcut, "right_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Right workspace"), COLUMN_SHORTCUT, entry_value, -1); + } else if (g_ascii_strcasecmp (*shortcut, "next_workspace_key") == 0) { gtk_list_store_append (GTK_LIST_STORE (model3), &iter); @@ -370,6 +492,26 @@ loadtheme_in_treeview (ThemeInfo *ti, gpointer data) gtk_list_store_append (GTK_LIST_STORE (model3), &iter); gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to previous workspace"), COLUMN_SHORTCUT, entry_value, -1); } + else if (g_ascii_strcasecmp (*shortcut, "move_window_up_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to upper workspace"), COLUMN_SHORTCUT, entry_value, -1); + } + else if (g_ascii_strcasecmp (*shortcut, "move_window_down_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to bottom workspace"), COLUMN_SHORTCUT, entry_value, -1); + } + else if (g_ascii_strcasecmp (*shortcut, "move_window_left_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to left workspace"), COLUMN_SHORTCUT, entry_value, -1); + } + else if (g_ascii_strcasecmp (*shortcut, "move_window_right_workspace_key") == 0) + { + gtk_list_store_append (GTK_LIST_STORE (model3), &iter); + gtk_list_store_set (GTK_LIST_STORE (model3), &iter, COLUMN_COMMAND, _("Move window to right workspace"), COLUMN_SHORTCUT, entry_value, -1); + } else if (g_ascii_strcasecmp (*shortcut, "move_window_workspace_1_key") == 0) { gtk_list_store_append (GTK_LIST_STORE (model3), &iter); @@ -1048,7 +1190,6 @@ cb_compose_dialog_key_release (GtkWidget * widget, GdkEventKey * event, gpointer gtk_list_store_set (GTK_LIST_STORE (model), &iter, COLUMN_SHORTCUT, shortcut_string, -1); /* save changes */ - printf("%s\n", current_key_theme); ti = find_theme_info_by_name (current_key_theme, keybinding_theme_list); if (ti) diff --git a/mcs-plugin/xfwm4_shortcuteditor.h b/mcs-plugin/xfwm4_shortcuteditor.h index da3c1e520..bc9850cae 100644 --- a/mcs-plugin/xfwm4_shortcuteditor.h +++ b/mcs-plugin/xfwm4_shortcuteditor.h @@ -21,6 +21,7 @@ #define __XFWM4_SHORTCUTEDITOR_H extern void cb_popup_add_menu (GtkWidget *, gpointer); +extern void cb_popup_del_menu (GtkWidget *, gpointer); extern gboolean cb_popup_menu (GtkTreeView *, GdkEventButton *, gpointer); extern void loadtheme_in_treeview (ThemeInfo *, gpointer); extern void savetreeview_in_theme (gchar *, gpointer); |