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; }
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); }
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; }
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; }
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; }
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; }
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; }