/* * Add object to the store. */ static void store_add_object (ClutterModel *store, char const *text) { FooTestObject *object; object = foo_test_object_new (); foo_test_object_set_text (object, text); /* Column #0 holds the actual object, the other cols are mapped to * its properties. */ clutter_model_append (store, 0, object, -1); g_object_unref (object); }
static gboolean populate_model (ClutterModel *model) { gint i; for (i = 0; i < 10; i++) { gchar *string = g_strdup_printf ("String %d", i); clutter_model_append (model, COLUMN_FOO, i, COLUMN_BAR, string, -1); g_free (string); } clutter_model_foreach (model, foreach_func, NULL); iterate (model); return FALSE; }
static void _xfdashboard_applications_menu_model_fill_model_collect_menu(XfdashboardApplicationsMenuModel *self, GarconMenu *inMenu, GarconMenu *inParentMenu, XfdashboardApplicationsMenuModelFillData *inFillData) { XfdashboardApplicationsMenuModelPrivate *priv; GarconMenu *menu; GarconMenu *section; GList *elements, *element; g_return_if_fail(XFDASHBOARD_IS_APPLICATIONS_MENU_MODEL(self)); g_return_if_fail(GARCON_IS_MENU(inMenu)); priv=self->priv; section=NULL; menu=priv->rootMenu; /* Increase reference on menu going to be processed to keep it alive */ g_object_ref(inMenu); /* Skip additional check on root menu as it must be processed normally and non-disruptively */ if(inMenu!=priv->rootMenu) { /* Find section to add menu to */ section=_xfdashboard_applications_menu_model_find_section(self, inMenu, inFillData); /* Add menu to model if no duplicate or similar menu exist */ menu=_xfdashboard_applications_menu_model_find_similar_menu(self, inMenu, inFillData); if(!menu) { const gchar *title=garcon_menu_element_get_name(GARCON_MENU_ELEMENT(inMenu)); const gchar *description=garcon_menu_element_get_comment(GARCON_MENU_ELEMENT(inMenu)); /* Insert row into model because there is no duplicate * and no similar menu */ inFillData->sequenceID++; clutter_model_append(CLUTTER_MODEL(self), XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SEQUENCE_ID, inFillData->sequenceID, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_MENU_ELEMENT, inMenu, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_PARENT_MENU, inParentMenu, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SECTION, section, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_TITLE, title, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_DESCRIPTION, description, -1); /* Add menu to list of populated ones */ inFillData->populatedMenus=g_slist_prepend(inFillData->populatedMenus, inMenu); /* All menu items should be added to this newly created menu */ menu=inMenu; /* Find section of newly created menu to */ section=_xfdashboard_applications_menu_model_find_section(self, menu, inFillData); } } /* Iterate through menu and add menu items and sub-menus */ elements=garcon_menu_get_elements(inMenu); for(element=elements; element; element=g_list_next(element)) { GarconMenuElement *menuElement; /* Get menu element from list */ menuElement=GARCON_MENU_ELEMENT(element->data); /* Check if menu element is visible */ if(!menuElement || !garcon_menu_element_get_visible(menuElement)) continue; /* If element is a menu call this function recursively */ if(GARCON_IS_MENU(menuElement)) { _xfdashboard_applications_menu_model_fill_model_collect_menu(self, GARCON_MENU(menuElement), menu, inFillData); } /* Insert row into model if menu element is a menu item if it does not * belong to root menu. */ if(GARCON_IS_MENU_ITEM(menuElement) && menu!=priv->rootMenu) { const gchar *title=garcon_menu_element_get_name(menuElement); const gchar *description=garcon_menu_element_get_comment(menuElement); /* Add menu item to model */ inFillData->sequenceID++; clutter_model_append(CLUTTER_MODEL(self), XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SEQUENCE_ID, inFillData->sequenceID, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_MENU_ELEMENT, menuElement, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_PARENT_MENU, menu, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SECTION, section, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_TITLE, title, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_DESCRIPTION, description, -1); } } g_list_free(elements); /* Connect signal 'reload-required' to recognize changes in menus */ g_signal_connect_swapped(inMenu, "reload-required", G_CALLBACK(_xfdashboard_applications_menu_model_on_reload_required), self); /* Release allocated resources */ g_object_unref(inMenu); }
static void mnb_home_new_widget_dialog_init (MnbHomeNewWidgetDialog *self) { ClutterActor *table, *itemview; MnbHomeNewWidgetDialogItemFactory *factory; MnbHomePluginsEngine *engine; const GList *l; self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, MNB_TYPE_HOME_NEW_WIDGET_DIALOG, MnbHomeNewWidgetDialogPrivate); /* set up model and view */ self->priv->items = clutter_list_model_new (ITEMS_N_COLUMNS, G_TYPE_STRING, "Module", /* ITEMS_MODULE */ G_TYPE_STRING, "Name", /* ITEMS_NAME */ G_TYPE_STRING, "Icon" /* ITEMS_ICON */); table = mx_table_new (); mx_bin_set_child (MX_BIN (self), table); factory = g_object_new (MNB_TYPE_HOME_NEW_WIDGET_DIALOG_ITEM_FACTORY, NULL); factory->dialog = self; itemview = mx_item_view_new (); mx_table_add_actor (MX_TABLE (table), itemview, 0, 1); mx_item_view_set_model (MX_ITEM_VIEW (itemview), self->priv->items); mx_item_view_set_factory (MX_ITEM_VIEW (itemview), MX_ITEM_FACTORY (factory)); mx_item_view_add_attribute (MX_ITEM_VIEW (itemview), "module", ITEMS_MODULE); mx_item_view_add_attribute (MX_ITEM_VIEW (itemview), "label", ITEMS_NAME); mx_item_view_add_attribute (MX_ITEM_VIEW (itemview), "icon", ITEMS_ICON); clutter_actor_show_all (table); /* find plugins */ /* FIXME: should we monitor for new plugins on the fly? */ engine = mnb_home_plugins_engine_dup (); for (l = peas_engine_get_plugin_list (PEAS_ENGINE (engine)); l != NULL; l = g_list_next (l)) { PeasPluginInfo *info = l->data; char *icon; if (!peas_plugin_info_is_available (info, NULL)) continue; icon = g_build_filename ( peas_plugin_info_get_module_dir (info), peas_plugin_info_get_icon_name (info), NULL); clutter_model_append (self->priv->items, ITEMS_MODULE, peas_plugin_info_get_module_name (info), ITEMS_NAME, peas_plugin_info_get_name (info), ITEMS_ICON, icon, -1); g_free (icon); } /* add actions */ mx_dialog_add_action (MX_DIALOG (self), mx_action_new_full ("cancel", _("Cancel"), G_CALLBACK (home_new_widget_dialog_cancel), self)); g_object_unref (engine); g_object_unref (factory); }