예제 #1
0
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);
    }
}
예제 #2
0
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;
}
예제 #3
0
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;
}