[network-manager-netbook] Inherit list items from GtkEventBox so that they'd have a GdkWindow.
- From: Tambet Ingo <tambeti src gnome org>
- To: svn-commits-list gnome org
- Subject: [network-manager-netbook] Inherit list items from GtkEventBox so that they'd have a GdkWindow.
- Date: Tue, 2 Jun 2009 10:21:41 -0400 (EDT)
commit 6ee823f1c47a69dde562305f73604f5121539cd8
Author: Tambet Ingo <tambet gmail com>
Date: Tue Jun 2 16:56:45 2009 +0300
Inherit list items from GtkEventBox so that they'd have a GdkWindow.
Fix a bunch of drawing hacks.
Add priority to items and a signal to notify it's changes so that the list
can order the items correctly.
---
src/nmn-item.c | 58 +++++++++++++++++++++++++++++++++++++++++++++-----
src/nmn-item.h | 10 +++++++-
src/nmn-list.c | 10 ++++----
src/nmn-list.h | 3 +-
src/nmn-networks.c | 12 ++--------
src/nmn-wifi-list.c | 9 +------
6 files changed, 72 insertions(+), 30 deletions(-)
diff --git a/src/nmn-item.c b/src/nmn-item.c
index 52306fe..1f8224f 100644
--- a/src/nmn-item.c
+++ b/src/nmn-item.c
@@ -3,13 +3,14 @@
#include "nmn-item.h"
#include "nmn-icon-cache.h"
-G_DEFINE_TYPE (NmnItem, nmn_item, GTK_TYPE_HBOX)
+G_DEFINE_TYPE (NmnItem, nmn_item, GTK_TYPE_EVENT_BOX)
enum {
CONNECT_REQUESTED,
DISCONNECT_REQUESTED,
REMOVE_REQUESTED,
DELETE,
+ PRIORITY_CHANGED,
LAST_SIGNAL
};
@@ -18,6 +19,8 @@ static guint signals[LAST_SIGNAL];
#define NMN_ITEM_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), NMN_TYPE_ITEM, NmnItemPrivate))
typedef struct {
+ GtkBox *box;
+
GtkWidget *icon;
GtkLabel *name;
GtkWidget *status_separator;
@@ -27,6 +30,7 @@ typedef struct {
GtkButton *connect;
GtkWidget *remove;
NmnItemStatus status;
+ guint priority;
} NmnItemPrivate;
GtkWidget *
@@ -96,6 +100,8 @@ nmn_item_set_status (NmnItem *item,
gtk_button_set_label (priv->connect, "Disconnect");
break;
}
+
+ nmn_item_set_status_visible (item, TRUE);
}
}
@@ -158,12 +164,13 @@ nmn_item_set_delete_visible (NmnItem *item,
gtk_container_add (GTK_CONTAINER (priv->remove),
gtk_image_new_from_stock (GTK_STOCK_DELETE, GTK_ICON_SIZE_BUTTON));
- gtk_box_pack_end (GTK_BOX (item), priv->remove, FALSE, FALSE, 0);
+ gtk_box_pack_end (priv->box, priv->remove, FALSE, FALSE, 0);
+ gtk_widget_show_all (priv->remove);
g_signal_connect_swapped (priv->remove, "clicked",
G_CALLBACK (nmn_item_delete),
item);
} else if (!visible && priv->remove) {
- gtk_container_remove (GTK_CONTAINER (item), priv->remove);
+ gtk_container_remove (GTK_CONTAINER (priv->box), priv->remove);
priv->remove = NULL;
}
}
@@ -194,6 +201,29 @@ nmn_item_remove_request (NmnItem *self)
g_signal_emit (self, signals[REMOVE_REQUESTED], 0);
}
+guint
+nmn_item_get_priority (NmnItem *self)
+{
+ g_return_val_if_fail (NMN_IS_ITEM (self), G_MAXUINT);
+
+ return NMN_ITEM_GET_PRIVATE (self)->priority;
+}
+
+void
+nmn_item_set_priority (NmnItem *self,
+ guint priority)
+{
+ NmnItemPrivate *priv;
+
+ g_return_if_fail (NMN_IS_ITEM (self));
+
+ priv = NMN_ITEM_GET_PRIVATE (self);
+ if (priv->priority != priority) {
+ priv->priority = priority;
+ g_signal_emit (self, signals[PRIORITY_CHANGED], 0, priority);
+ }
+}
+
static void
nmn_item_connect (NmnItem *item)
{
@@ -226,11 +256,14 @@ nmn_item_init (NmnItem *item)
GtkWidget *hbox;
GtkWidget *w;
+ priv->box = GTK_BOX (gtk_hbox_new (FALSE, 6));
+ gtk_container_set_border_width (GTK_CONTAINER (priv->box), 6);
+
priv->icon = gtk_image_new ();
- gtk_box_pack_start (GTK_BOX (item), priv->icon, FALSE, FALSE, 0);
+ gtk_box_pack_start (priv->box, priv->icon, FALSE, FALSE, 0);
vbox = gtk_vbox_new (FALSE, 0);
- gtk_box_pack_start (GTK_BOX (item), vbox, TRUE, TRUE, 0);
+ gtk_box_pack_start (priv->box, vbox, TRUE, TRUE, 0);
hbox = gtk_hbox_new (FALSE, 12);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
@@ -269,7 +302,10 @@ nmn_item_init (NmnItem *item)
priv->remove = NULL;
- gtk_widget_show_all (GTK_WIDGET (item));
+ priv->priority = G_MAXUINT;
+
+ gtk_container_add (GTK_CONTAINER (item), GTK_WIDGET (priv->box));
+ gtk_widget_show_all (GTK_WIDGET (priv->box));
}
static void
@@ -318,4 +354,14 @@ nmn_item_class_init (NmnItemClass *class)
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ signals[PRIORITY_CHANGED] = g_signal_new
+ ("priority-changed",
+ G_OBJECT_CLASS_TYPE (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NmnItemClass, priority_changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__UINT,
+ G_TYPE_NONE, 1,
+ G_TYPE_UINT);
}
diff --git a/src/nmn-item.h b/src/nmn-item.h
index f8bde34..095ba08 100644
--- a/src/nmn-item.h
+++ b/src/nmn-item.h
@@ -13,11 +13,11 @@
#define NMN_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NMN_TYPE_ITEM, NmnItemClass))
typedef struct {
- GtkHBox parent;
+ GtkEventBox parent;
} NmnItem;
typedef struct {
- GtkHBoxClass parent;
+ GtkEventBoxClass parent;
/* Methods */
void (*connect) (NmnItem *self);
@@ -28,6 +28,8 @@ typedef struct {
void (*disconnect_requested) (NmnItem *self);
void (*remove_requested) (NmnItem *self);
void (*delete) (NmnItem *self);
+ void (*priority_changed) (NmnItem *self,
+ guint priority);
} NmnItemClass;
typedef enum {
@@ -64,4 +66,8 @@ void nmn_item_connect_request (NmnItem *self);
void nmn_item_disconnect_request (NmnItem *self);
void nmn_item_remove_request (NmnItem *self);
+guint nmn_item_get_priority (NmnItem *self);
+void nmn_item_set_priority (NmnItem *self,
+ guint priority);
+
#endif /* NMN_ITEM_H */
diff --git a/src/nmn-list.c b/src/nmn-list.c
index 736b98d..4cac77e 100644
--- a/src/nmn-list.c
+++ b/src/nmn-list.c
@@ -122,12 +122,12 @@ drag_end (GtkWidget *widget, GdkDragContext *drag_context, gpointer user_data)
void
nmn_list_add_item (NmnList *list,
- GtkWidget *item)
+ NmnItem *item)
{
g_return_if_fail (NMN_IS_LIST (list));
- g_return_if_fail (GTK_IS_WIDGET (item));
+ g_return_if_fail (NMN_IS_ITEM (item));
- gtk_drag_source_set (item, GDK_BUTTON1_MASK,
+ gtk_drag_source_set (GTK_WIDGET (item), GDK_BUTTON1_MASK,
nmn_list_targets, G_N_ELEMENTS (nmn_list_targets),
GDK_ACTION_MOVE);
@@ -147,8 +147,8 @@ nmn_list_add_item (NmnList *list,
G_CALLBACK (drag_end),
list);
- gtk_box_pack_start (GTK_BOX (list), item, FALSE, FALSE, 0);
- gtk_widget_queue_resize (GTK_WIDGET (list));
+ gtk_box_pack_start (GTK_BOX (list), GTK_WIDGET (item), FALSE, FALSE, 0);
+ gtk_widget_show (GTK_WIDGET (item));
}
diff --git a/src/nmn-list.h b/src/nmn-list.h
index d84d4c4..7146255 100644
--- a/src/nmn-list.h
+++ b/src/nmn-list.h
@@ -4,6 +4,7 @@
#define NMN_LIST_H
#include <gtk/gtk.h>
+#include <nmn-item.h>
#define NMN_TYPE_LIST (nmn_list_get_type ())
#define NMN_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NMN_TYPE_LIST, NmnList))
@@ -24,6 +25,6 @@ GType nmn_list_get_type (void);
GtkWidget *nmn_list_new (void);
void nmn_list_add_item (NmnList *list,
- GtkWidget *item);
+ NmnItem *item);
#endif /* NMN_LIST_H */
diff --git a/src/nmn-networks.c b/src/nmn-networks.c
index 75b7903..c7dc9d8 100644
--- a/src/nmn-networks.c
+++ b/src/nmn-networks.c
@@ -85,10 +85,9 @@ typedef struct {
static void
remove_connections_cb (GtkWidget *widget, gpointer data)
{
+ NmnNetworkItem *item = NMN_NETWORK_ITEM (widget);
RemoveInfo *info = (RemoveInfo *) data;
- NmnNetworkItem *item;
- item = NMN_NETWORK_ITEM (gtk_bin_get_child (GTK_BIN (widget)));
if ((info->item && (NmnItem *) item == info->item) ||
(info->exported && nmn_network_item_get_connection (item) == info->exported) ||
(info->device && nmn_network_item_get_device (item) == info->device))
@@ -132,12 +131,8 @@ item_added (NmnDeviceHandler *handler,
gpointer user_data)
{
NmnNetworks *self = NMN_NETWORKS (user_data);
- GtkWidget *event_box;
- event_box = gtk_event_box_new ();
- gtk_container_add (GTK_CONTAINER (event_box), GTK_WIDGET (item));
- gtk_widget_show_all (event_box);
- nmn_list_add_item (NMN_LIST (self), event_box);
+ nmn_list_add_item (NMN_LIST (self), item);
g_signal_connect (item, "remove-requested", G_CALLBACK (item_remove_requested), self);
find_ac_for_item (self, NMN_NETWORK_ITEM (item));
@@ -192,8 +187,7 @@ device_removed (NMClient *client,
static void
acs_changed_cb (GtkWidget *widget, gpointer data)
{
- find_ac_for_item (NMN_NETWORKS (data),
- NMN_NETWORK_ITEM (gtk_bin_get_child (GTK_BIN (widget))));
+ find_ac_for_item (NMN_NETWORKS (data), NMN_NETWORK_ITEM (widget));
}
static void
diff --git a/src/nmn-wifi-list.c b/src/nmn-wifi-list.c
index e819b15..5e07b89 100644
--- a/src/nmn-wifi-list.c
+++ b/src/nmn-wifi-list.c
@@ -86,15 +86,14 @@ static void
matching_ap_cb (GtkWidget *widget,
gpointer user_data)
{
+ NmnWifiItem *item = NMN_WIFI_ITEM (widget);
MatchingAPInfo *info = (MatchingAPInfo *) user_data;
- NmnWifiItem *item;
NMAccessPoint *ap;
const GByteArray *ssid;
if (info->have_match)
return;
- item = NMN_WIFI_ITEM (gtk_bin_get_child (GTK_BIN (widget)));
ap = nmn_wifi_item_get_ap (item);
ssid = nm_access_point_get_ssid (ap);
@@ -158,16 +157,12 @@ ap_added (NMDeviceWifi *device,
NmnWifiList *list = NMN_WIFI_LIST (user_data);
NmnWifiListPrivate *priv = GET_PRIVATE (list);
GtkWidget *item;
- GtkWidget *event_box;
if (ignore_ap (list, device, ap))
return;
item = nmn_wifi_item_new (priv->nm_data, device, ap);
- event_box = gtk_event_box_new ();
- gtk_container_add (GTK_CONTAINER (event_box), item);
- gtk_widget_show_all (event_box);
- nmn_list_add_item (NMN_LIST (list), event_box);
+ nmn_list_add_item (NMN_LIST (list), NMN_ITEM (item));
g_signal_connect (item, "connect-requested", G_CALLBACK (connect_requested), list);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]