gnome-packagekit r93 - trunk/src



Author: rhughes
Date: Sun Feb 10 22:17:37 2008
New Revision: 93
URL: http://svn.gnome.org/viewvc/gnome-packagekit?rev=93&view=rev

Log:
from git

Modified:
   trunk/src/Makefile.am
   trunk/src/pk-application.c

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Sun Feb 10 22:17:37 2008
@@ -9,6 +9,7 @@
 	$(GCONF_CFLAGS)					\
 	$(LIBGLADE_CFLAGS)				\
 	$(LIBNOTIFY_CFLAGS)				\
+	$(LIBSEXY_CFLAGS)				\
 	$(PACKAGEKIT_CFLAGS)				\
 	$(GTK_CFLAGS)					\
 	-DBINDIR=\"$(bindir)\"			 	\
@@ -120,6 +121,7 @@
 	$(GLIB_LIBS)					\
 	$(DBUS_LIBS)					\
 	$(LIBGLADE_LIBS)				\
+	$(LIBSEXY_LIBS)					\
 	$(GTK_LIBS)					\
 	$(PACKAGEKIT_LIBS)				\
 	$(NULL)

Modified: trunk/src/pk-application.c
==============================================================================
--- trunk/src/pk-application.c	(original)
+++ trunk/src/pk-application.c	Sun Feb 10 22:17:37 2008
@@ -26,6 +26,7 @@
 
 #include <glade/glade.h>
 #include <gtk/gtk.h>
+#include <libsexy/sexy-icon-entry.h>
 #include <math.h>
 #include <string.h>
 
@@ -48,6 +49,13 @@
 
 #define PK_APPLICATION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_APPLICATION, PkApplicationPrivate))
 
+typedef enum {
+	PK_SEARCH_NAME,
+	PK_SEARCH_DETAILS,
+	PK_SEARCH_FILE,
+	PK_SEARCH_UNKNOWN
+} PkSearchType;
+
 struct PkApplicationPrivate
 {
 	GladeXML		*glade_xml;
@@ -67,7 +75,7 @@
 	PkEnumList		*group_list;
 	PkEnumList		*current_filter;
 	gboolean		 search_in_progress;
-	guint			 search_depth;
+	PkSearchType		 search_type;
 };
 
 enum {
@@ -549,7 +557,7 @@
 		gtk_label_set_label (GTK_LABEL (widget), _("Find"));
 
 		widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
-		gtk_widget_set_tooltip_text(widget, _("Find packages"));
+		gtk_widget_set_tooltip_text (widget, _("Find packages"));
 
 		application->priv->search_in_progress = FALSE;
 	} else {
@@ -625,18 +633,21 @@
 	filter_all = pk_enum_list_to_string (application->priv->current_filter);
 	pk_debug ("filter = %s", filter_all);
 
-	if (application->priv->search_depth == 0) {
+	if (application->priv->search_type == PK_SEARCH_NAME) {
 		pk_client_reset (application->priv->client_search);
 		pk_client_set_name_filter (application->priv->client_search, TRUE);
 		ret = pk_client_search_name (application->priv->client_search, filter_all, package);
-	} else if (application->priv->search_depth == 1) {
+	} else if (application->priv->search_type == PK_SEARCH_DETAILS) {
 		pk_client_reset (application->priv->client_search);
 		pk_client_set_name_filter (application->priv->client_search, TRUE);
 		ret = pk_client_search_details (application->priv->client_search, filter_all, package);
-	} else {
+	} else if (application->priv->search_type == PK_SEARCH_FILE) {
 		pk_client_reset (application->priv->client_search);
 		pk_client_set_name_filter (application->priv->client_search, TRUE);
 		ret = pk_client_search_file (application->priv->client_search, filter_all, package);
+	} else {
+		pk_warning ("invalid search type");
+		return;
 	}
 
 	if (ret == FALSE) {
@@ -658,7 +669,7 @@
 	gtk_label_set_label (GTK_LABEL (widget), _("Cancel"));
 
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
-	gtk_widget_set_tooltip_text(widget, _("Cancel search"));
+	gtk_widget_set_tooltip_text (widget, _("Cancel search"));
 
 	g_free (filter_all);
 }
@@ -758,18 +769,6 @@
 }
 
 /**
- * pk_application_depth_combobox_changed_cb:
- **/
-static void
-pk_application_depth_combobox_changed_cb (GtkComboBox *combobox, PkApplication *application)
-{
-	g_return_if_fail (application != NULL);
-	g_return_if_fail (PK_IS_APPLICATION (application));
-	application->priv->search_depth = gtk_combo_box_get_active (combobox);
-	pk_debug ("search depth: %i", application->priv->search_depth);
-}
-
-/**
  * pk_application_filter_installed_combobox_changed_cb:
  **/
 static void
@@ -1127,6 +1126,159 @@
 }
 
 /**
+ * pk_application_create_custom_widget:
+ **/
+GtkWidget *
+pk_application_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
+				     gchar *string1, gchar *string2,
+				     gint int1, gint int2, gpointer user_data)
+{
+	//PkApplication *application
+	if (pk_strequal (name, "entry_text") == TRUE) {
+		pk_warning ("creating sexy icon=%s", name);
+		return sexy_icon_entry_new ();
+	}
+	pk_warning ("name unknown=%s", name);
+	return NULL;
+}
+
+/**
+ * pk_application_popup_position_menu:
+ **/
+static void
+pk_application_popup_position_menu (GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data)
+{
+	GtkWidget     *widget;
+	GtkRequisition requisition;
+	gint menu_xpos = 0;
+	gint menu_ypos = 0;
+
+	widget = GTK_WIDGET (user_data);
+
+	/* find the location */
+	gdk_window_get_origin (widget->window, &menu_xpos, &menu_ypos);
+	gtk_widget_size_request (GTK_WIDGET (widget), &requisition);
+
+	/* set the position */
+	*x = menu_xpos;
+	*y = menu_ypos + requisition.height - 1;
+	*push_in = TRUE;
+}
+
+/**
+ * pk_application_menu_search_by_name:
+ **/
+static void
+pk_application_menu_search_by_name (GtkMenuItem *item, gpointer data)
+{
+	GtkWidget *icon;
+	GtkWidget *widget;
+	PkApplication *application = PK_APPLICATION (data);
+
+	/* change type */
+	application->priv->search_type = PK_SEARCH_NAME;
+	pk_debug ("set search type=%i", application->priv->search_type);
+
+	/* set the new icon */
+	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	gtk_widget_set_tooltip_text (widget, _("Searching by name"));
+	icon = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
+	sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (icon));
+}
+
+/**
+ * pk_application_menu_search_by_description:
+ **/
+static void
+pk_application_menu_search_by_description (GtkMenuItem *item, gpointer data)
+{
+	GtkWidget *icon;
+	GtkWidget *widget;
+	PkApplication *application = PK_APPLICATION (data);
+
+	/* set type */
+	application->priv->search_type = PK_SEARCH_DETAILS;
+	pk_debug ("set search type=%i", application->priv->search_type);
+
+	/* set the new icon */
+	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	gtk_widget_set_tooltip_text (widget, _("Searching by description"));
+	icon = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
+	sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (icon));
+}
+
+/**
+ * pk_application_menu_search_by_file:
+ **/
+static void
+pk_application_menu_search_by_file (GtkMenuItem *item, gpointer data)
+{
+	GtkWidget *icon;
+	GtkWidget *widget;
+	PkApplication *application = PK_APPLICATION (data);
+
+	/* set type */
+	application->priv->search_type = PK_SEARCH_FILE;
+	pk_debug ("set search type=%i", application->priv->search_type);
+
+	/* set the new icon */
+	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	gtk_widget_set_tooltip_text (widget, _("Searching by file"));
+	icon = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
+	sexy_icon_entry_set_icon (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE (icon));
+}
+
+/**
+ * pk_application_entry_text_icon_pressed_cb:
+ **/
+static void
+pk_application_entry_text_icon_pressed_cb (SexyIconEntry *entry, gint icon_pos, gint button, gpointer data)
+{
+	GtkMenu *menu = (GtkMenu*) gtk_menu_new ();
+	GtkWidget *item;
+	GtkWidget *image;
+	PkApplication *application = PK_APPLICATION (data);
+
+	/* only respond to left button */
+	if (button != 1) {
+		return;
+	}
+	pk_debug ("icon_pos=%i", icon_pos);
+
+	if (pk_enum_list_contains (application->priv->role_list, PK_ROLE_ENUM_SEARCH_NAME) == TRUE) {
+		item = gtk_image_menu_item_new_with_mnemonic (_("Search by name"));
+		image = gtk_image_new_from_stock (GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
+		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+		g_signal_connect (G_OBJECT (item), "activate",
+				  G_CALLBACK (pk_application_menu_search_by_name), application);
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+	}
+
+	if (pk_enum_list_contains (application->priv->role_list, PK_ROLE_ENUM_SEARCH_DETAILS) == TRUE) {
+		item = gtk_image_menu_item_new_with_mnemonic (_("Search by description"));
+		image = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
+		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+		g_signal_connect (G_OBJECT (item), "activate",
+				  G_CALLBACK (pk_application_menu_search_by_description), application);
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+	}
+
+	if (pk_enum_list_contains (application->priv->role_list, PK_ROLE_ENUM_SEARCH_FILE) == TRUE) {
+		item = gtk_image_menu_item_new_with_mnemonic (_("Search by file"));
+		image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
+		gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+		g_signal_connect (G_OBJECT (item), "activate",
+				  G_CALLBACK (pk_application_menu_search_by_file), application);
+		gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+	}
+
+	gtk_widget_show_all (GTK_WIDGET (menu));
+	gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
+			pk_application_popup_position_menu, entry,
+			1, gtk_get_current_event_time());
+}
+
+/**
  * pk_application_init:
  **/
 static void
@@ -1136,6 +1288,7 @@
 	GtkWidget *vbox;
 	GtkWidget *widget;
 	PkGroupEnum group;
+	gchar *locale; /* does not need to be freed */
 	guint length;
 	guint page;
 	guint i;
@@ -1145,7 +1298,7 @@
 	application->priv->url = NULL;
 	application->priv->search_in_progress = FALSE;
 
-	application->priv->search_depth = 0;
+	application->priv->search_type = PK_SEARCH_UNKNOWN;
 	application->priv->current_filter = pk_enum_list_new ();
 	pk_enum_list_set_type (application->priv->current_filter, PK_ENUM_LIST_TYPE_FILTER);
 
@@ -1153,6 +1306,9 @@
 	gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
                                            PK_DATA G_DIR_SEPARATOR_S "icons");
 
+	/* use a sexy widget */
+	glade_set_custom_handler (pk_application_create_custom_widget, application);
+
 	application->priv->client_search = pk_client_new ();
 	g_signal_connect (application->priv->client_search, "package",
 			  G_CALLBACK (pk_application_package_cb), application);
@@ -1213,7 +1369,10 @@
 	/* single instance, so this is valid */
 	application->priv->extra = pk_extra_new ();
 	pk_extra_set_database (application->priv->extra, "/var/lib/PackageKit/extra-data.db");
-	pk_extra_set_locale (application->priv->extra, "en_GB");
+
+	/* set the locale */
+	locale = setlocale (LC_ALL, NULL);
+	pk_extra_set_locale (application->priv->extra, locale);
 
 	application->priv->glade_xml = glade_xml_new (PK_DATA "/pk-application.glade", NULL, NULL);
 	main_window = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
@@ -1229,17 +1388,17 @@
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_install");
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (pk_application_install_cb), application);
-	gtk_widget_set_tooltip_text(widget, _("Install selected package"));
+	gtk_widget_set_tooltip_text (widget, _("Install selected package"));
 
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_remove");
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (pk_application_remove_cb), application);
-	gtk_widget_set_tooltip_text(widget, _("Remove selected package"));
+	gtk_widget_set_tooltip_text (widget, _("Remove selected package"));
 
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (pk_application_homepage_cb), application);
-	gtk_widget_set_tooltip_text(widget, _("Visit homepage for selected package"));
+	gtk_widget_set_tooltip_text (widget, _("Visit homepage for selected package"));
 
 	widget = glade_xml_get_widget (application->priv->glade_xml, "hbox_description");
 	gtk_widget_hide (widget);
@@ -1285,28 +1444,20 @@
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (pk_application_find_cb), application);
-	gtk_widget_set_tooltip_text(widget, _("Find packages"));
+	gtk_widget_set_tooltip_text (widget, _("Find packages"));
 
 	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
 	/* set focus on entry text */
 	gtk_widget_grab_focus (widget);
+	gtk_widget_show (widget);
+	sexy_icon_entry_set_icon_highlight (SEXY_ICON_ENTRY (widget), SEXY_ICON_ENTRY_PRIMARY, TRUE);
 	g_signal_connect (widget, "activate",
 			  G_CALLBACK (pk_application_find_cb), application);
+	g_signal_connect (widget, "icon-pressed",
+			  G_CALLBACK (pk_application_entry_text_icon_pressed_cb), application);
 
-	/* search */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "combobox_depth");
-	if (pk_enum_list_contains (application->priv->role_list, PK_ROLE_ENUM_SEARCH_NAME) == TRUE) {
-		gtk_combo_box_append_text (GTK_COMBO_BOX (widget), _("By package name"));
-	}
-	if (pk_enum_list_contains (application->priv->role_list, PK_ROLE_ENUM_SEARCH_DETAILS) == TRUE) {
-		gtk_combo_box_append_text (GTK_COMBO_BOX (widget), _("By description"));
-	}
-	if (pk_enum_list_contains (application->priv->role_list, PK_ROLE_ENUM_SEARCH_FILE) == TRUE) {
-		gtk_combo_box_append_text (GTK_COMBO_BOX (widget), _("By file"));
-	}
-	g_signal_connect (GTK_COMBO_BOX (widget), "changed",
-			  G_CALLBACK (pk_application_depth_combobox_changed_cb), application);
-	gtk_combo_box_set_active (GTK_COMBO_BOX (widget), 0);
+	/* coldplug icon to default to search by name*/
+	pk_application_menu_search_by_name (NULL, application);
 
 	/* filter installed */
 	widget = glade_xml_get_widget (application->priv->glade_xml, "combobox_filter_installed");



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]