gboolean mate_panel_applet_can_freely_move (AppletInfo *applet) { MateConfClient *client; PanelMateConfKeyType key_type; const char *key; if (panel_lockdown_get_locked_down ()) return FALSE; client = panel_mateconf_get_client (); key_type = (applet->type == PANEL_OBJECT_APPLET) ? PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS; key = panel_mateconf_full_key (key_type, applet->id, "position"); if (!mateconf_client_key_is_writable (client, key, NULL)) return FALSE; key = panel_mateconf_full_key (key_type, applet->id, "toplevel_id"); if (!mateconf_client_key_is_writable (client, key, NULL)) return FALSE; key = panel_mateconf_full_key (key_type, applet->id, "panel_right_stick"); if (!mateconf_client_key_is_writable (client, key, NULL)) return FALSE; return TRUE; }
void mateconf_bookmarks_hook_up_menu (MateConfEditorWindow *window, GtkWidget *menu, GtkWidget *add_bookmark, GtkWidget *edit_bookmarks) { MateConfClient *client; guint notify_id; g_object_set_data (G_OBJECT (menu), "editor-window", window); client = mateconf_client_get_default (); /* Add a notify function */ mateconf_client_add_dir (client, "/apps/mateconf-editor/bookmarks", MATECONF_CLIENT_PRELOAD_ONELEVEL, NULL); notify_id = mateconf_client_notify_add (client, "/apps/mateconf-editor/bookmarks", mateconf_bookmarks_key_changed, menu, NULL, NULL); g_object_set_data_full (G_OBJECT (menu), "notify-id", GINT_TO_POINTER (notify_id), remove_notify_id); notify_id = mateconf_client_notify_add (client, "/desktop/mate/interface/menus_have_icons", mateconf_bookmarks_have_icons_notify, menu, NULL, NULL); g_object_set_data_full (G_OBJECT (menu), "notify-id-x", GINT_TO_POINTER (notify_id), remove_notify_id); mateconf_bookmarks_update_menu (menu); { gboolean have_icons; MateConfValue *value; GError *err; err = NULL; value = mateconf_client_get (client, "/desktop/mate/interface/menus_have_icons", &err); if (err != NULL || value == NULL || value->type != MATECONF_VALUE_BOOL) return; have_icons = mateconf_value_get_bool (value); mateconf_bookmarks_set_have_icons (menu, have_icons); mateconf_value_free (value); } if ( ! mateconf_client_key_is_writable (client, "/apps/mateconf-editor/bookmarks", NULL)) { gtk_widget_set_sensitive (add_bookmark, FALSE); gtk_widget_set_sensitive (edit_bookmarks, FALSE); } g_object_unref (client); }
gboolean mc_key_writable (MCData *mc, const char *key) { gboolean writable; char *fullkey; static MateConfClient *client = NULL; if (client == NULL) client = mateconf_client_get_default (); fullkey = mate_panel_applet_mateconf_get_full_key (mc->applet, key); writable = mateconf_client_key_is_writable (client, fullkey, NULL); g_free (fullkey); return writable; }
gboolean mate_panel_applet_lockable (AppletInfo *applet) { MateConfClient *client; PanelMateConfKeyType key_type; const char *key; if (panel_lockdown_get_locked_down ()) return FALSE; client = panel_mateconf_get_client (); key_type = (applet->type == PANEL_OBJECT_APPLET) ? PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS; key = panel_mateconf_full_key (key_type, applet->id, "locked"); return mateconf_client_key_is_writable (client, key, NULL); }
static void setup_sensitivity(PagerData* pager, GtkBuilder* builder, const char* wid1, const char* wid2, const char* wid3, const char* key) { MatePanelApplet* applet = MATE_PANEL_APPLET(pager->applet); MateConfClient* client = mateconf_client_get_default(); char* fullkey; GtkWidget* w; if (key[0] == '/') fullkey = g_strdup(key); else fullkey = mate_panel_applet_mateconf_get_full_key(applet, key); if (mateconf_client_key_is_writable(client, fullkey, NULL)) { g_object_unref(G_OBJECT(client)); g_free(fullkey); return; } g_object_unref(G_OBJECT(client)); g_free(fullkey); w = WID(wid1); g_assert(w != NULL); g_object_set_data(G_OBJECT(w), NEVER_SENSITIVE, GINT_TO_POINTER(1)); gtk_widget_set_sensitive(w, FALSE); if (wid2 != NULL) { w = WID(wid2); g_assert(w != NULL); g_object_set_data(G_OBJECT(w), NEVER_SENSITIVE, GINT_TO_POINTER(1)); gtk_widget_set_sensitive(w, FALSE); } if (wid3 != NULL) { w = WID(wid3); g_assert(w != NULL); g_object_set_data(G_OBJECT(w), NEVER_SENSITIVE, GINT_TO_POINTER(1)); gtk_widget_set_sensitive(w, FALSE); } }
int main(int argc, char** argv) { GtkWidget* window; GtkWidget* entry; MateConfClient* client; gtk_init(&argc, &argv); mateconf_init(argc, argv, NULL); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); entry = gtk_entry_new(); gtk_container_add(GTK_CONTAINER(window), entry); client = mateconf_client_get_default(); mateconf_client_add_dir(client, "/extra/test/directory", MATECONF_CLIENT_PRELOAD_NONE, NULL); g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (entry_activated_callback), client); /* If key isn't writable, then set insensitive */ gtk_widget_set_sensitive (entry, mateconf_client_key_is_writable (client, "/extra/test/directory/key", NULL)); gtk_widget_show_all(window); gtk_main(); return 0; }
static void mc_preferences_setup_dialog (GtkBuilder *builder, MCData *mc) { MCPrefsDialog *dialog; GtkCellRenderer *renderer; MateConfClient *client; GdkColor color; dialog = &mc->prefs_dialog; g_signal_connect (dialog->dialog, "response", G_CALLBACK (preferences_response), mc); gtk_dialog_set_default_response (GTK_DIALOG (dialog->dialog), GTK_RESPONSE_CLOSE); gtk_window_set_default_size (GTK_WINDOW (dialog->dialog), 400, -1); dialog->auto_complete_history_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "auto_complete_history_toggle")); dialog->size_spinner = GTK_WIDGET (gtk_builder_get_object (builder, "size_spinner")); dialog->use_default_theme_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "default_theme_toggle")); dialog->fg_color_picker = GTK_WIDGET (gtk_builder_get_object (builder, "fg_color_picker")); dialog->bg_color_picker = GTK_WIDGET (gtk_builder_get_object (builder, "bg_color_picker")); dialog->macros_tree = GTK_WIDGET (gtk_builder_get_object (builder, "macros_tree")); dialog->delete_button = GTK_WIDGET (gtk_builder_get_object (builder, "delete_button")); dialog->add_button = GTK_WIDGET (gtk_builder_get_object (builder, "add_button")); /* History based autocompletion */ g_signal_connect (dialog->auto_complete_history_toggle, "toggled", G_CALLBACK (auto_complete_history_toggled), mc); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->auto_complete_history_toggle), mc->preferences.auto_complete_history); if ( ! mc_key_writable (mc, "autocomplete_history")) hard_set_sensitive (dialog->auto_complete_history_toggle, FALSE); /* Width */ gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->size_spinner), mc->preferences.normal_size_x); g_signal_connect (dialog->size_spinner, "value_changed", G_CALLBACK (size_value_changed), mc); if ( ! mc_key_writable (mc, "normal_size_x")) { hard_set_sensitive (dialog->size_spinner, FALSE); hard_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "size_label")), FALSE); hard_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "size_post_label")), FALSE); } /* Use default theme */ g_signal_connect (dialog->use_default_theme_toggle, "toggled", G_CALLBACK (use_default_theme_toggled), mc); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->use_default_theme_toggle), mc->preferences.show_default_theme); if ( ! mc_key_writable (mc, "show_default_theme")) hard_set_sensitive (dialog->use_default_theme_toggle, FALSE); /* Foreground color */ g_signal_connect (dialog->fg_color_picker, "color_set", G_CALLBACK (foreground_color_set), mc); color.red = mc->preferences.cmd_line_color_fg_r; color.green = mc->preferences.cmd_line_color_fg_g; color.blue = mc->preferences.cmd_line_color_fg_b; gtk_color_button_set_color (GTK_COLOR_BUTTON (dialog->fg_color_picker), &color); soft_set_sensitive (dialog->fg_color_picker, !mc->preferences.show_default_theme); if ( ! mc_key_writable (mc, "cmd_line_color_fg_r") || ! mc_key_writable (mc, "cmd_line_color_fg_g") || ! mc_key_writable (mc, "cmd_line_color_fg_b")) { hard_set_sensitive (dialog->fg_color_picker, FALSE); hard_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "fg_color_label")), FALSE); } /* Background color */ g_signal_connect (dialog->bg_color_picker, "color_set", G_CALLBACK (background_color_set), mc); color.red = mc->preferences.cmd_line_color_bg_r; color.green = mc->preferences.cmd_line_color_bg_g; color.blue = mc->preferences.cmd_line_color_bg_b; gtk_color_button_set_color (GTK_COLOR_BUTTON (dialog->bg_color_picker), &color); soft_set_sensitive (dialog->bg_color_picker, !mc->preferences.show_default_theme); if ( ! mc_key_writable (mc, "cmd_line_color_bg_r") || ! mc_key_writable (mc, "cmd_line_color_bg_g") || ! mc_key_writable (mc, "cmd_line_color_bg_b")) { hard_set_sensitive (dialog->bg_color_picker, FALSE); hard_set_sensitive (GTK_WIDGET (gtk_builder_get_object (builder, "bg_color_label")), FALSE); } /* Macros Delete and Add buttons */ g_signal_connect (dialog->delete_button, "clicked", G_CALLBACK (macro_delete), mc); g_signal_connect (dialog->add_button, "clicked", G_CALLBACK (macro_add), mc); client = mateconf_client_get_default (); if ( ! mateconf_client_key_is_writable (client, "/apps/mini-commander/macro_patterns", NULL) || ! mateconf_client_key_is_writable (client, "/apps/mini-commander/macro_commands", NULL)) { hard_set_sensitive (dialog->add_button, FALSE); hard_set_sensitive (dialog->delete_button, FALSE); hard_set_sensitive (dialog->macros_tree, FALSE); } /* Macros tree view */ dialog->macros_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING, NULL); gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->macros_tree), GTK_TREE_MODEL (dialog->macros_store)); renderer = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT, "editable", TRUE, NULL); g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_PATTERN)); g_signal_connect (renderer, "edited", G_CALLBACK (macro_edited), mc); gtk_tree_view_insert_column_with_attributes ( GTK_TREE_VIEW (dialog->macros_tree), -1, _("Pattern"), renderer, "text", COLUMN_PATTERN, NULL); renderer = g_object_new (GTK_TYPE_CELL_RENDERER_TEXT, "editable", TRUE, NULL); g_object_set_data (G_OBJECT (renderer), "column", GINT_TO_POINTER (COLUMN_COMMAND)); g_signal_connect (renderer, "edited", G_CALLBACK (macro_edited), mc); gtk_tree_view_insert_column_with_attributes ( GTK_TREE_VIEW (dialog->macros_tree), -1, _("Command"), renderer, "text", COLUMN_COMMAND, NULL); show_macros_list (mc); }
void mate_panel_applet_save_position (AppletInfo *applet_info, const char *id, gboolean immediate) { PanelMateConfKeyType key_type; MateConfClient *client; PanelWidget *panel_widget; const char *key; const char *toplevel_id; char *old_toplevel_id; gboolean right_stick; gboolean locked; int position; g_return_if_fail (applet_info != NULL); if (!immediate) { if (!queued_position_source) queued_position_source = g_timeout_add_seconds (1, (GSourceFunc) mate_panel_applet_position_save_timeout, NULL); if (!g_slist_find (queued_position_saves, applet_info)) queued_position_saves = g_slist_prepend (queued_position_saves, applet_info); return; } if (!(toplevel_id = mate_panel_applet_get_toplevel_id (applet_info))) return; client = panel_mateconf_get_client (); key_type = applet_info->type == PANEL_OBJECT_APPLET ? PANEL_MATECONF_APPLETS : PANEL_MATECONF_OBJECTS; panel_widget = mate_panel_applet_get_panel_widget (applet_info); /* FIXME: Instead of getting keys, comparing and setting, there should be a dirty flag */ key = panel_mateconf_full_key (key_type, id, "toplevel_id"); old_toplevel_id = mateconf_client_get_string (client, key, NULL); if (old_toplevel_id == NULL || strcmp (old_toplevel_id, toplevel_id) != 0) mateconf_client_set_string (client, key, toplevel_id, NULL); g_free (old_toplevel_id); /* Note: changing some properties of the panel that may not be locked down (e.g. background) can change the state of the "panel_right_stick" and "position" properties of an applet that may in fact be locked down. So check if these are writable before attempting to write them */ right_stick = panel_is_applet_right_stick (applet_info->widget) ? 1 : 0; key = panel_mateconf_full_key ( key_type, id, "panel_right_stick"); if (mateconf_client_key_is_writable (client, key, NULL) && (mateconf_client_get_bool (client, key, NULL) ? 1 : 0) != right_stick) mateconf_client_set_bool (client, key, right_stick, NULL); position = mate_panel_applet_get_position (applet_info); if (right_stick && !panel_widget->packed) position = panel_widget->size - position; key = panel_mateconf_full_key (key_type, id, "position"); if (mateconf_client_key_is_writable (client, key, NULL) && mateconf_client_get_int (client, key, NULL) != position) mateconf_client_set_int (client, key, position, NULL); locked = panel_widget_get_applet_locked (panel_widget, applet_info->widget) ? 1 : 0; key = panel_mateconf_full_key (key_type, id, "locked"); if (mateconf_client_get_bool (client, key, NULL) ? 1 : 0 != locked) mateconf_client_set_bool (client, key, locked, NULL); }
/* Create an entry used to edit the given config key */ static GtkWidget* create_config_entry (GtkWidget *prefs_dialog, MateConfClient *client, const gchar *config_key, gboolean focus) { GtkWidget *hbox; GtkWidget *entry; GtkWidget *label; char *str; hbox = gtk_hbox_new (FALSE, 5); label = gtk_label_new (config_key); entry = gtk_entry_new (); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (hbox), entry, FALSE, FALSE, 0); /* this will print an error via default error handler * if the key isn't set to a string */ str = mateconf_client_get_string (client, config_key, NULL); if (str) { gtk_entry_set_text (GTK_ENTRY (entry), str); g_free (str); } g_object_set_data (G_OBJECT (entry), "client", client); g_object_set_data_full (G_OBJECT (entry), "key", g_strdup (config_key), (GDestroyNotify) g_free); /* Commit changes if the user focuses out, or hits enter; we don't * do this on "changed" since it'd probably be a bit too slow to * round-trip to the server on every "changed" signal. */ g_signal_connect (G_OBJECT (entry), "focus_out_event", G_CALLBACK (config_entry_commit), NULL); g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (config_entry_commit), NULL); /* Set the entry insensitive if the key it edits isn't writable. * Technically, we should update this sensitivity if the key gets * a change notify, but that's probably overkill. */ gtk_widget_set_sensitive (entry, mateconf_client_key_is_writable (client, config_key, NULL)); if (focus) gtk_widget_grab_focus (entry); return hbox; }