static void popup_callback(GtkButton *button, dt_lib_module_t *module) { static dt_lib_module_info_t mi; int size = 0; g_strlcpy(mi.plugin_name, module->plugin_name, sizeof(mi.plugin_name)); mi.version = module->version(); mi.module = module; void *params = module->get_params(module, &size); // make sure that we have enough space for params if(params && (size <= sizeof(mi.params))) { memcpy(mi.params, params, size); mi.params_size = size; free(params); } else { mi.params_size = 0; fprintf(stderr, "something went wrong: ¶ms=%p, size=%i\n", ¶ms, size); } dt_lib_presets_popup_menu_show(&mi); gtk_menu_popup(darktable.gui->presets_popup_menu, NULL, NULL, _preset_popup_posistion, button, 0, gtk_get_current_event_time()); gtk_widget_show_all(GTK_WIDGET(darktable.gui->presets_popup_menu)); gtk_menu_reposition(GTK_MENU(darktable.gui->presets_popup_menu)); }
static void popup_callback(GtkButton *button, dt_lib_module_t *module) { static dt_lib_module_info_t mi; int size = 0; g_strlcpy(mi.plugin_name, module->plugin_name, sizeof(mi.plugin_name)); mi.version = module->version(module); mi.module = module; void *params = module->get_params(module, &size); // make sure that we have enough space for params if(params && (size <= sizeof(mi.params))) { memcpy(mi.params, params, size); mi.params_size = size; free(params); } else { mi.params_size = 0; fprintf(stderr, "something went wrong: ¶ms=%p, size=%i\n", ¶ms, size); } dt_lib_presets_popup_menu_show(&mi); #if GTK_CHECK_VERSION(3, 22, 0) int c = module->container(module); GdkGravity widget_gravity, menu_gravity; if((c == DT_UI_CONTAINER_PANEL_LEFT_TOP) || (c == DT_UI_CONTAINER_PANEL_LEFT_CENTER) || (c == DT_UI_CONTAINER_PANEL_LEFT_BOTTOM)) { // FIXME: these should be _EAST, but then it goes out of the sidepanel... widget_gravity = GDK_GRAVITY_SOUTH; menu_gravity = GDK_GRAVITY_NORTH; } else { widget_gravity = GDK_GRAVITY_SOUTH_WEST; menu_gravity = GDK_GRAVITY_NORTH_WEST; } gtk_menu_popup_at_widget(darktable.gui->presets_popup_menu, dtgtk_expander_get_header(DTGTK_EXPANDER(module->expander)), widget_gravity, menu_gravity, NULL); #else gtk_menu_popup(darktable.gui->presets_popup_menu, NULL, NULL, _preset_popup_posistion, button, 0, gtk_get_current_event_time()); #endif gtk_widget_show_all(GTK_WIDGET(darktable.gui->presets_popup_menu)); gtk_menu_reposition(GTK_MENU(darktable.gui->presets_popup_menu)); }
static void popup_callback(GtkButton *button, dt_lib_module_t *module) { static dt_lib_module_info_t mi; int32_t size = 0; g_strlcpy(mi.plugin_name, module->plugin_name, 128); mi.version = module->version(); mi.module = module; void *params = module->get_params(module, &size); if(params) { g_assert(size <= 4096); memcpy(mi.params, params, size); mi.params_size = size; free(params); } else mi.params_size = 0; dt_lib_presets_popup_menu_show(&mi); gtk_menu_popup(darktable.gui->presets_popup_menu, NULL, NULL, _preset_popup_posistion, button, 0, gtk_get_current_event_time()); gtk_widget_show_all(GTK_WIDGET(darktable.gui->presets_popup_menu)); gtk_menu_reposition(GTK_MENU(darktable.gui->presets_popup_menu)); }