Ejemplo n.º 1
0
static gboolean
panel_callback_handler (const gchar  *name,
                        const gchar  *value,
                        gpointer      user_data,
                        GError      **error)
{
  panel_return_val_if_fail (name != NULL, FALSE);

  if (strcmp (name, "--preferences") == 0
      || strcmp (name, "-p") == 0)
    {
      opt_preferences = value != NULL ? MAX (0, atoi (value)) : 0;
    }
  else if (strcmp (name, "--add-items") == 0
           || strcmp (name, "-a") == 0)
    {
      opt_add_items = value != NULL ? MAX (0, atoi (value)) : 0;
    }
  else
    {
      panel_assert_not_reached ();
      return FALSE;
    }

  return TRUE;
}
Ejemplo n.º 2
0
static GdkPixbuf *
xfce_panel_image_scale_pixbuf (GdkPixbuf *source,
                               gint       dest_width,
                               gint       dest_height)
{
  gdouble ratio;
  gint    source_width;
  gint    source_height;

  panel_return_val_if_fail (GDK_IS_PIXBUF (source), NULL);

  /* we fail on invalid sizes */
  if (G_UNLIKELY (dest_width <= 0 || dest_height <= 0))
    return NULL;

  source_width = gdk_pixbuf_get_width (source);
  source_height = gdk_pixbuf_get_height (source);

  /* check if we need to scale */
  if (source_width <= dest_width && source_height <= dest_height)
    return g_object_ref (G_OBJECT (source));

  /* calculate the new dimensions */

  ratio = MIN ((gdouble) dest_width / (gdouble) source_width,
               (gdouble) dest_height / (gdouble) source_height);

  dest_width  = rint (source_width * ratio);
  dest_height = rint (source_height * ratio);

  return gdk_pixbuf_scale_simple (source, MAX (dest_width, 1),
                                  MAX (dest_height, 1),
                                  GDK_INTERP_BILINEAR);
}
Ejemplo n.º 3
0
gint
panel_dialogs_choose_panel (PanelApplication *application)
{
  GtkWidget *dialog;
  GtkWidget *vbox;
  GtkWidget *label;
  GtkWidget *combo;
  guint      i;
  gint       response = -1;
  gchar     *name;

  panel_return_val_if_fail (PANEL_IS_APPLICATION (application), -1);

  /* setup the dialog */
  dialog = gtk_dialog_new_with_buttons (_("Add New Item"), NULL,
                                        GTK_DIALOG_NO_SEPARATOR,
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                        GTK_STOCK_ADD, GTK_RESPONSE_OK, NULL);
  gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
  gtk_window_set_icon_name (GTK_WINDOW (dialog), GTK_STOCK_ADD);
  gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);

  /* create widgets */
  vbox = gtk_vbox_new (FALSE, 6);
  gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox, FALSE, FALSE, 0);
  gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
  gtk_widget_show (vbox);

  label = gtk_label_new (_("Please choose a panel for the new plugin:"));
  gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
  gtk_widget_show (label);

  combo = gtk_combo_box_new_text ();
  gtk_box_pack_start (GTK_BOX (vbox), combo, FALSE, FALSE, 0);
  gtk_widget_show (combo);

  /* insert the panels */
  for (i = 0; i < panel_application_get_n_windows (application); i++)
    {
      name = g_strdup_printf (_("Panel %d"), i + 1);
      gtk_combo_box_append_text (GTK_COMBO_BOX (combo), name);
      g_free (name);
    }

  /* select first panel (changed will start marching ants) */
  g_signal_connect (G_OBJECT (combo), "changed",
       G_CALLBACK (panel_dialogs_choose_panel_combo_changed), application);
  gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);

  /* run the dialog */
  if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
    response = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
  gtk_widget_destroy (dialog);

  /* unset panel selections */
  panel_application_window_select (application, NULL);

  return response;
}
Ejemplo n.º 4
0
gboolean
panel_dbus_client_save (GError **error)
{
    DBusGProxy *dbus_proxy;
    gboolean    result;

    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;

    result = _panel_dbus_client_save (dbus_proxy, error);

    g_object_unref (G_OBJECT (dbus_proxy));

    return result;
}
Ejemplo n.º 5
0
gboolean
panel_dbus_client_display_items_dialog (guint    active,
                                        GError **error)
{
    gboolean    result;
    DBusGProxy *dbus_proxy;

    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;

    result = _panel_dbus_client_display_items_dialog (dbus_proxy, active,
             error);

    g_object_unref (G_OBJECT (dbus_proxy));

    return result;
}
Ejemplo n.º 6
0
gboolean
panel_dbus_client_add_new_item (const gchar  *plugin_name,
                                gchar       **arguments,
                                GError      **error)
{
    DBusGProxy *dbus_proxy;
    gboolean    result;

    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;

    result = _panel_dbus_client_add_new_item (dbus_proxy, plugin_name,
             (const gchar **) arguments,
             error);

    g_object_unref (G_OBJECT (dbus_proxy));

    return result;
}
Ejemplo n.º 7
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;
}