Subscription date : 24 January 2009
Messages : 12573
|
But it's still possible to do that from the GUI: @fabounet: any idea how to do that easily? (maybe by using a variable outside functions)? Maybe by doing that? === modified file 'src/gldit/cairo-dock-gui-factory.c'
--- src/gldit/cairo-dock-gui-factory.c 2013-04-04 13:07:22 +0000
+++ src/gldit/cairo-dock-gui-factory.c 2013-04-04 14:50:15 +0000
@@ -1191,6 +1191,42 @@
return _build_list_for_gui ((CDForeachRendererFunc)cairo_dock_foreach_dialog_decorator, (GHFunc)_cairo_dock_add_one_dialog_decorator_item, NULL);
}
+
+static gboolean _test_one_name (GtkTreeModel *model, G_GNUC_UNUSED GtkTreePath *path, GtkTreeIter *iter, gpointer *data)
+{
+ gchar *cName = NULL, *cResult = NULL;
+ gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_RESULT, &cResult, -1);
+ if (cResult == NULL)
+ gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_NAME, &cName, -1);
+ else if (data[3])
+ cairo_dock_extract_package_type_from_name (cResult);
+ if ((cResult && strcmp (data[0], cResult) == 0) || (cName && strcmp (data[0], cName) == 0))
+ {
+ GtkTreeIter *iter_to_fill = data[1];
+ memcpy (iter_to_fill, iter, sizeof (GtkTreeIter));
+ gboolean *bFound = data[2];
+ *bFound = TRUE;
+ g_free (cName);
+ g_free (cResult);
+ return TRUE;
+ }
+ g_free (cName);
+ g_free (cResult);
+ return FALSE;
+}
+
+static gboolean _cairo_dock_find_iter_from_name_full (GtkListStore *pModele, const gchar *cName, GtkTreeIter *iter, gboolean bIsTheme)
+{
+ if (cName == NULL)
+ return FALSE;
+ gboolean bFound = FALSE;
+ gconstpointer data[4] = {cName, iter, &bFound, GINT_TO_POINTER (bIsTheme)};
+ gtk_tree_model_foreach (GTK_TREE_MODEL (pModele), (GtkTreeModelForeachFunc) _test_one_name, data);
+ return bFound;
+}
++
+CairoDock *g_pCurrentDock;
static void _cairo_dock_add_one_dock_item (const gchar *cName, CairoDock *pDock, GtkListStore *pModele)
{
gchar *cUserName = NULL;
@@ -1199,6 +1235,8 @@
Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, NULL);
if (pPointingIcon && ! CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (pPointingIcon)) return ;
+ if (g_pCurrentDock != NULL && cairo_dock_is_dock_contains_subdock (g_pCurrentDock, pDock))
+ return;
if (pDock->iRefCount == 0)
cUserName = cairo_dock_get_readable_name_for_fock (pDock);
}
@@ -1213,10 +1251,17 @@
CAIRO_DOCK_MODEL_IMAGE, "none", -1);
g_free (cUserName);
}
-static GtkListStore *_cairo_dock_build_dock_list_for_gui (void)
+static GtkListStore *_cairo_dock_build_dock_list_for_gui (const gchar *cContainerName)
{
+ g_pCurrentDock = cairo_dock_search_dock_from_name (cContainerName); +
GtkListStore *pList = _build_list_for_gui ((CDForeachRendererFunc)cairo_dock_foreach_docks, (GHFunc)_cairo_dock_add_one_dock_item, NULL);
+
GtkTreeIter iter;
+
+ if (cContainerName && _cairo_dock_find_iter_from_name (pList, cContainerName, &iter))
+ gtk_list_store_remove (pList, &iter);
+
memset (&iter, 0, sizeof (GtkTreeIter));
gtk_list_store_append (GTK_LIST_STORE (pList), &iter);
gtk_list_store_set (GTK_LIST_STORE (pList), &iter,
@@ -1286,40 +1331,6 @@
CAIRO_DOCK_RUN_AFTER);
}
-static gboolean _test_one_name (GtkTreeModel *model, G_GNUC_UNUSED GtkTreePath *path, GtkTreeIter *iter, gpointer *data)
-{
- gchar *cName = NULL, *cResult = NULL;
- gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_RESULT, &cResult, -1);
- if (cResult == NULL)
- gtk_tree_model_get (model, iter, CAIRO_DOCK_MODEL_NAME, &cName, -1);
- else if (data[3])
- cairo_dock_extract_package_type_from_name (cResult);
- if ((cResult && strcmp (data[0], cResult) == 0) || (cName && strcmp (data[0], cName) == 0))
- {
- GtkTreeIter *iter_to_fill = data[1];
- memcpy (iter_to_fill, iter, sizeof (GtkTreeIter));
- gboolean *bFound = data[2];
- *bFound = TRUE;
- g_free (cName);
- g_free (cResult);
- return TRUE;
- }
- g_free (cName);
- g_free (cResult);
- return FALSE;
-}
-static gboolean _cairo_dock_find_iter_from_name_full (GtkListStore *pModele, const gchar *cName, GtkTreeIter *iter, gboolean bIsTheme)
-{
- if (cName == NULL)
- return FALSE;
- gboolean bFound = FALSE;
- gconstpointer data[4] = {cName, iter, &bFound, GINT_TO_POINTER (bIsTheme)};
- gtk_tree_model_foreach (GTK_TREE_MODEL (pModele), (GtkTreeModelForeachFunc) _test_one_name, data);
- return bFound;
-}
--
-
static void cairo_dock_fill_combo_with_themes (GtkWidget *pCombo, GHashTable *pThemeTable, gchar *cActiveTheme, gchar *cHint)
{
cd_debug ("%s (%s, %s)", __func__, cActiveTheme, cHint);
@@ -2500,8 +2511,8 @@
case CAIRO_DOCK_WIDGET_DOCK_LIST : {
- GtkListStore *pDocksListStore = _cairo_dock_build_dock_list_for_gui ();
GtkTreeIter iter;
+ gchar *cContainerName = NULL;
GError *error = NULL;
@@ -2509,12 +2520,10 @@
if (error != NULL) g_error_free (error);
else if (iIconType == CAIRO_DOCK_ICON_TYPE_CONTAINER) - {
- gchar *cContainerName = g_key_file_get_string (pKeyFile, cGroupName, "Name", NULL);
- if (cContainerName && _cairo_dock_find_iter_from_name (pDocksListStore, cContainerName, &iter))
- gtk_list_store_remove (pDocksListStore, &iter);
- g_free (cContainerName);
- }
+ cContainerName = g_key_file_get_string (pKeyFile, cGroupName, "Name", NULL);
+
+ GtkListStore *pDocksListStore = _cairo_dock_build_dock_list_for_gui (cContainerName);
+ g_free (cContainerName);
pOneWidget = gtk_combo_box_new_with_model (GTK_TREE_MODEL (pDocksListStore));
rend = gtk_cell_renderer_text_new ();
But it's not so clean (but easier than rewrite _build_list_for_gui to add a new arg and then modified it to use a "gpointer *" if needed, etc.) |