int get_property_page (ThunarxProviderFactory* f, GList *flist, const char *class_name, GtkWidget **pp, char *title, int tlen, GtkWindow *win) { GList *ps, *lp; ps = thunarx_provider_factory_list_providers(f, THUNARX_TYPE_PROPERTY_PAGE_PROVIDER); *pp = NULL; for (lp = ps; lp != NULL; lp = lp->next) { GList *pgs, *lpg; pgs = thunarx_property_page_provider_get_pages(lp->data, flist); for (lpg = pgs; lpg != NULL && *pp == NULL; lpg = lpg->next) { if (strncmp(class_name, G_OBJECT_TYPE_NAME(lpg->data), 256) == 0) { *pp = GTK_WIDGET(g_object_ref(lpg->data)); } } g_list_foreach (pgs, (GFunc) g_object_ref_sink, NULL); g_list_foreach (pgs, (GFunc) g_object_unref, NULL); g_list_free (pgs); } g_list_foreach (ps, (GFunc) g_object_unref, NULL); g_list_free (ps); if (*pp != NULL) { if (g_list_length(flist) == 1) { snprintf(title, tlen, "%s: %s", gtk_label_get_text(GTK_LABEL(thunarx_property_page_get_label_widget(THUNARX_PROPERTY_PAGE(*pp)))), thunarx_file_info_get_name(THUNARX_FILE_INFO(flist->data))); } else { snprintf(title, tlen, "%s", gtk_label_get_text(GTK_LABEL(thunarx_property_page_get_label_widget(THUNARX_PROPERTY_PAGE(*pp))))); } /* Try to adjust some buttons to close the window on click */ gtk_container_foreach (*pp, adjust_destroy, win); } return *pp != NULL; }
static void thunarx_property_page_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { ThunarxPropertyPage *property_page = THUNARX_PROPERTY_PAGE (object); switch (prop_id) { case PROP_LABEL: g_value_set_string (value, thunarx_property_page_get_label (property_page)); break; case PROP_LABEL_WIDGET: g_value_set_object (value, thunarx_property_page_get_label_widget (property_page)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }