[nautilus-actions] nact_providers_list_create_model: do not initialize widgets with future BaseWindow
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions] nact_providers_list_create_model: do not initialize widgets with future BaseWindow
- Date: Wed, 26 Jan 2011 22:35:19 +0000 (UTC)
commit 5bde0e0df39f9835ecaabc3210cfbed9f443336f
Author: Pierre Wieser <pwieser trychlos org>
Date: Wed Jan 26 23:33:23 2011 +0100
nact_providers_list_create_model: do not initialize widgets with future BaseWindow
ChangeLog | 4 ++
src/nact/nact-providers-list.c | 90 +++++++++++++++++++++++++++++++---------
src/nact/nact-providers-list.h | 2 +-
3 files changed, 75 insertions(+), 21 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index b4ff279..1678660 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2011-01-26 Pierre Wieser <pwieser trychlos org>
+ * src/nact/nact-providers-list.c:
+ * src/nact/nact-providers-list.h (nact_providers_list_create_model):
+ Do not initialize the widgets with the future BaseWindow.
+
* src/nact/nact-schemes-list.c: Only ask for preferences once.
* src/nact/nact-assistant-import.c (assist_new):
diff --git a/src/nact/nact-providers-list.c b/src/nact/nact-providers-list.c
index d2f21f2..6b1eef1 100644
--- a/src/nact/nact-providers-list.c
+++ b/src/nact/nact-providers-list.c
@@ -58,6 +58,23 @@ enum {
PROVIDER_N_COLUMN
};
+/* data attached to the treeview widget on gtk toplevel initialization
+ * at this time, only treeview is set
+ * at base window initialization time, the current window is associated
+ */
+typedef struct {
+ /* set when creating the model (on_initialize_gtk_toplevel)
+ */
+ GtkTreeView *treeview;
+
+ /* set when initializing the view (on_initialize_base_window)
+ */
+ BaseWindow *window;
+ gboolean preferences_locked;
+ gboolean editable;
+}
+ ProvidersListData;
+
/* some data needed when saving the list store
*/
typedef struct {
@@ -66,36 +83,38 @@ typedef struct {
}
ProvidersListSaveData;
+#define PROVIDERS_LIST_DATA "nact-providers-list-data"
#define PROVIDERS_LIST_TREEVIEW "nact-providers-list-treeview"
static gboolean st_on_selection_change = FALSE;
-static void init_view_setup_providers( GtkTreeView *treeview, BaseWindow *window );
-static void init_view_connect_signals( GtkTreeView *treeview, BaseWindow *window );
-static void init_view_select_first_row( GtkTreeView *treeview );
+static void init_view_setup_providers( GtkTreeView *treeview, BaseWindow *window );
+static void init_view_connect_signals( GtkTreeView *treeview, BaseWindow *window );
+static void init_view_select_first_row( GtkTreeView *treeview );
-static gboolean providers_list_save_iter( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter* iter, ProvidersListSaveData *plsd );
+static gboolean providers_list_save_iter( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter* iter, ProvidersListSaveData *plsd );
-static void on_selection_changed( GtkTreeSelection *selection, BaseWindow *window );
-static void on_readable_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window );
-static void on_writable_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window );
-static void on_up_clicked( GtkButton *button, BaseWindow *window );
-static void on_down_clicked( GtkButton *button, BaseWindow *window );
+static void on_selection_changed( GtkTreeSelection *selection, BaseWindow *window );
+static void on_readable_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window );
+static void on_writable_toggled( GtkCellRendererToggle *renderer, gchar *path, BaseWindow *window );
+static void on_up_clicked( GtkButton *button, BaseWindow *window );
+static void on_down_clicked( GtkButton *button, BaseWindow *window );
-static gboolean are_preferences_locked( BaseWindow *window );
-static void display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, BaseWindow *window );
-static GtkButton *get_up_button( BaseWindow *window );
-static GtkButton *get_down_button( BaseWindow *window );
+static gboolean are_preferences_locked( BaseWindow *window );
+static void display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, ProvidersListData *data );
+static GtkButton *get_up_button( BaseWindow *window );
+static GtkButton *get_down_button( BaseWindow *window );
+static ProvidersListData *get_providers_list_data( GtkTreeView *treeview );
/**
- * nact_providers_list_create_providers_list:
+ * nact_providers_list_create_model:
* @treeview: the #GtkTreeView.
*
* Create the treeview model when initially loading the widget from
* the UI manager.
*/
void
-nact_providers_list_create_model( BaseWindow *window, GtkTreeView *treeview )
+nact_providers_list_create_model( GtkTreeView *treeview )
{
static const char *thisfn = "nact_providers_list_create_model";
GtkListStore *model;
@@ -103,10 +122,14 @@ nact_providers_list_create_model( BaseWindow *window, GtkTreeView *treeview )
GtkTreeViewColumn *column;
GtkCellRenderer *text_cell;
GtkTreeSelection *selection;
+ ProvidersListData *data;
- g_debug( "%s: treeview=%p", thisfn, ( void * ) treeview );
g_return_if_fail( GTK_IS_TREE_VIEW( treeview ));
+ g_debug( "%s: treeview=%p", thisfn, ( void * ) treeview );
+
+ data = get_providers_list_data( treeview );
+
model = gtk_list_store_new( PROVIDER_N_COLUMN,
G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_OBJECT );
gtk_tree_view_set_model( treeview, GTK_TREE_MODEL( model ));
@@ -147,7 +170,7 @@ nact_providers_list_create_model( BaseWindow *window, GtkTreeView *treeview )
text_cell,
"text", PROVIDER_LIBELLE_COLUMN,
NULL );
- gtk_tree_view_column_set_cell_data_func( column, text_cell, ( GtkTreeCellDataFunc ) display_label, window, NULL );
+ gtk_tree_view_column_set_cell_data_func( column, text_cell, ( GtkTreeCellDataFunc ) display_label, data, NULL );
gtk_tree_view_append_column( treeview, column );
/* id */
@@ -178,13 +201,19 @@ void
nact_providers_list_init_view( BaseWindow *window, GtkTreeView *treeview )
{
static const gchar *thisfn = "nact_providers_list_init_view";
+ ProvidersListData *data;
- g_debug( "%s: treeview=%p, window=%p", thisfn, ( void * ) treeview, ( void * ) window );
g_return_if_fail( BASE_IS_WINDOW( window ));
g_return_if_fail( GTK_IS_TREE_VIEW( treeview ));
+ g_debug( "%s: treeview=%p, window=%p", thisfn, ( void * ) treeview, ( void * ) window );
+
g_object_set_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW, treeview );
+ data = get_providers_list_data( treeview );
+ data->window = window;
+ data->preferences_locked = are_preferences_locked( window );
+
init_view_setup_providers( treeview, window );
init_view_connect_signals( treeview, window );
@@ -420,6 +449,9 @@ on_selection_changed( GtkTreeSelection *selection, BaseWindow *window )
NAUpdater *updater;
NASettings *settings;
+ g_debug( "nact_providers_list_on_selection_changed: selection=%p, window=%p (%s)",
+ ( void * ) selection, ( void * ) window, G_OBJECT_TYPE_NAME( window ));
+
may_up = FALSE;
may_down = FALSE;
@@ -594,6 +626,8 @@ are_preferences_locked( BaseWindow *window )
NASettings *settings;
gboolean are_locked;
+ g_debug( "nact_providers_list_are_preferences_locked: window=%p (%s)", ( void * ) window, G_OBJECT_TYPE_NAME( window ));
+
application = NACT_APPLICATION( base_window_get_application( window ));
updater = nact_application_get_updater( application );
settings = na_pivot_get_settings( NA_PIVOT( updater ));
@@ -606,7 +640,7 @@ are_preferences_locked( BaseWindow *window )
* unavailable provider: italic grey
*/
static void
-display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, BaseWindow *window )
+display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, ProvidersListData *data )
{
NAIOProvider *provider;
gchar *name;
@@ -625,7 +659,7 @@ display_label( GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *m
g_object_set( cell, "text", name, NULL );
- if( are_preferences_locked( window )){
+ if( data->preferences_locked ){
g_object_set( cell, "foreground", "grey", "foreground-set", TRUE, NULL );
}
@@ -651,3 +685,19 @@ get_down_button( BaseWindow *window )
return( button );
}
+
+static ProvidersListData *
+get_providers_list_data( GtkTreeView *treeview )
+{
+ ProvidersListData *data;
+
+ data = ( ProvidersListData * ) g_object_get_data( G_OBJECT( treeview ), PROVIDERS_LIST_DATA );
+
+ if( data == NULL ){
+ data = g_new0( ProvidersListData, 1 );
+ g_object_set_data( G_OBJECT( treeview ), PROVIDERS_LIST_DATA, data );
+ data->treeview = treeview;
+ }
+
+ return( data );
+}
diff --git a/src/nact/nact-providers-list.h b/src/nact/nact-providers-list.h
index 342e83d..6b41670 100644
--- a/src/nact/nact-providers-list.h
+++ b/src/nact/nact-providers-list.h
@@ -37,7 +37,7 @@
G_BEGIN_DECLS
-void nact_providers_list_create_model( BaseWindow *window, GtkTreeView *treeview );
+void nact_providers_list_create_model( GtkTreeView *treeview );
void nact_providers_list_init_view( BaseWindow *window, GtkTreeView *treeview );
void nact_providers_list_save( BaseWindow *window );
void nact_providers_list_dispose( BaseWindow *window );
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]