void exitbutton_save(XfcePanelPlugin *plugin, ExitbuttonPlugin *exitbutton) { if (exo_str_is_empty(exitbutton->icon_name)) { return; } // Update the icon xfce_panel_image_set_from_source(XFCE_PANEL_IMAGE(exitbutton->icon), exitbutton->icon_name); /******************************************************** * Save the properties ********************************************************/ XfceRc *rc; gchar *file; /* get the config file location */ file = xfce_panel_plugin_save_location(plugin, TRUE); if (G_UNLIKELY (file == NULL)) { DBG("Failed to open config file"); return; } /* open the config file, read/write */ rc = xfce_rc_simple_open(file, FALSE); g_free(file); if (G_LIKELY (rc != NULL)) { /* save the settings */ DBG("."); if (exitbutton->icon_name) xfce_rc_write_entry(rc, "icon_name", exitbutton->icon_name); /* close the rc file */ xfce_rc_close(rc); } }
static ExitbuttonPlugin * exitbutton_new(XfcePanelPlugin *plugin) { /* allocate memory for the plugin structure */ ExitbuttonPlugin *exitbutton = g_slice_new0(ExitbuttonPlugin); /* pointer to plugin */ exitbutton->plugin = plugin; /* read the user settings */ exitbutton_read(exitbutton); /* some panel widgets */ exitbutton->button = xfce_panel_create_button(); gtk_widget_show(exitbutton->button); g_signal_connect(G_OBJECT(exitbutton->button), "clicked", G_CALLBACK(button_clicked), plugin); exitbutton->icon = xfce_panel_image_new_from_source(exo_str_is_empty (exitbutton->icon_name) ? DEFAULT_ICON_NAME : exitbutton->icon_name); gtk_widget_show(exitbutton->icon); gtk_container_add(GTK_CONTAINER(exitbutton->button), exitbutton->icon); return exitbutton; }
gboolean panel_dbus_client_plugin_event (const gchar *plugin_event, gboolean *return_succeed, GError **error) { DBusGProxy *dbus_proxy; gboolean result = FALSE; gchar **tokens; GType type; GValue value = { 0, }; guint n_tokens; panel_return_val_if_fail (error == NULL || *error == NULL, FALSE); dbus_proxy = panel_dbus_client_get_proxy (error); if (G_UNLIKELY (dbus_proxy == NULL)) return FALSE; tokens = g_strsplit (plugin_event, ":", -1); n_tokens = g_strv_length (tokens); if (!(n_tokens == 2 || n_tokens == N_TOKENS) || exo_str_is_empty (tokens[PLUGIN_NAME]) || exo_str_is_empty (tokens[NAME])) { g_set_error_literal (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, _("Invalid plugin event syntax specified. " "Use PLUGIN-NAME:NAME[:TYPE:VALUE].")); goto out; } else if (n_tokens == 2) { /* set noop value, recognized by the dbus service as %NULL value */ g_value_init (&value, G_TYPE_UCHAR); g_value_set_uchar (&value, '\0'); } else if (n_tokens == N_TOKENS) { type = panel_dbus_client_gtype_from_string (tokens[TYPE]); if (G_LIKELY (type != G_TYPE_NONE)) { g_value_init (&value, type); if (type == G_TYPE_BOOLEAN) g_value_set_boolean (&value, strcmp (tokens[VALUE], "true") == 0); else if (type == G_TYPE_DOUBLE) g_value_set_double (&value, g_ascii_strtod (tokens[VALUE], NULL)); else if (type == G_TYPE_INT) g_value_set_int (&value, strtol (tokens[VALUE], NULL, 0)); else if (type == G_TYPE_STRING) g_value_set_static_string (&value, tokens[VALUE]); else if (type == G_TYPE_UINT) g_value_set_uint (&value, strtol (tokens[VALUE], NULL, 0)); else panel_assert_not_reached (); } else { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, _("Invalid hint type \"%s\". Valid types " "are bool, double, int, string and uint."), tokens[TYPE]); goto out; } } else { panel_assert_not_reached (); goto out; } /* send value over dbus */ panel_return_val_if_fail (G_IS_VALUE (&value), FALSE); result = _panel_dbus_client_plugin_event (dbus_proxy, tokens[PLUGIN_NAME], tokens[NAME], &value, return_succeed, error); g_value_unset (&value); out: g_strfreev (tokens); g_object_unref (G_OBJECT (dbus_proxy)); return result; }