Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
menu.c File Reference
#include "common/darktable.h"
#include "common/act_on.h"
#include "common/debug.h"
#include "common/collection.h"
#include "common/selection.h"
#include "control/conf.h"
#include "develop/develop.h"
#include "gui/gtk.h"
#include "views/view.h"
#include "math.h"
#include "menu.h"
+ Include dependency graph for menu.c:

Go to the source code of this file.

Typedefs

typedef struct dt_masks_form_gui_t dt_masks_form_gui_t
 

Functions

static void _activate_callback_to_action_callback (GtkMenuItem *menu_item, gpointer user_data)
 
static gboolean _menu_icon_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data)
 
static void _menu_entry_destroy (GtkWidget *widget, gpointer user_data)
 
GtkWidgetctx_gtk_menu_item_new_with_icon (const char *label, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data, dt_menu_icon_t icon)
 
GtkWidgetctx_gtk_menu_item_new_with_icon_and_shortcut (const char *label, const char *shortcut, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data, dt_menu_icon_t icon)
 
GtkWidgetctx_gtk_menu_item_new_with_markup (const char *label, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data)
 
GtkWidgetctx_gtk_menu_item_new_with_markup_and_shortcut (const char *label, const char *shortcut, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data)
 
GtkWidgetctx_gtk_menu_item_new_with_markup_and_pixbuf (const char *label, GdkPixbuf *icon, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data)
 
GtkWidgetctx_gtk_check_menu_item_new_with_markup (const char *label, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data, const gboolean checked, const gboolean show_checkbox)
 
GtkWidgetctx_gtk_check_menu_item_new_with_markup_and_pixbuf (const char *label, GdkPixbuf *icon, GtkWidget *menu, void(*activate_callback)(GtkWidget *widget, gpointer user_data), gpointer user_data, const gboolean checked, const gboolean show_checkbox)
 
dt_menu_entry_tset_menu_entry (GtkWidget **menus, GList **items_list, const gchar *label, dt_menus_t menu_index, GtkMenu *parent, void *data, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gboolean(*checked_callback)(GtkWidget *widget), gboolean(*active_callback)(GtkWidget *widget), gboolean(*sensitive_callback)(GtkWidget *widget), guint key_val, GdkModifierType mods, GtkAccelGroup *accel_group)
 
void update_entry (dt_menu_entry_t *entry)
 
void update_menu_entries (GtkWidget *widget, gpointer user_data)
 
void add_generic_top_menu_entry (GtkWidget *menu_bar, GtkWidget **menus, GList **lists, const dt_menus_t index, gchar *label, GtkAccelGroup *accel_group, const char *accel_path_prefix)
 
void add_top_menu_entry (GtkWidget *menu_bar, GtkWidget **menus, GList **lists, const dt_menus_t index, gchar *label)
 
void add_generic_top_submenu_entry (GtkWidget **menus, GList **lists, const gchar *label, const dt_menus_t index, GtkAccelGroup *accel_group)
 
void add_top_submenu_entry (GtkWidget **menus, GList **lists, const gchar *label, const dt_menus_t index)
 
void add_generic_sub_menu_entry (GtkWidget **menus, GList **lists, const gchar *label, const dt_menus_t index, void *data, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gboolean(*checked_callback)(GtkWidget *widget), gboolean(*active_callback)(GtkWidget *widget), gboolean(*sensitive_callback)(GtkWidget *widget), guint key_val, GdkModifierType mods, GtkAccelGroup *accel_group)
 
void add_sub_menu_entry (GtkWidget **menus, GList **lists, const gchar *label, const dt_menus_t index, void *data, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gboolean(*checked_callback)(GtkWidget *widget), gboolean(*active_callback)(GtkWidget *widget), gboolean(*sensitive_callback)(GtkWidget *widget), guint key_val, GdkModifierType mods)
 
void add_no_accel_sub_menu_entry (GtkWidget **menus, GList **lists, const gchar *label, const dt_menus_t index, void *data, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gboolean(*checked_callback)(GtkWidget *widget), gboolean(*active_callback)(GtkWidget *widget), gboolean(*sensitive_callback)(GtkWidget *widget), guint key_val, GdkModifierType mods)
 
void add_generic_sub_sub_menu_entry (GtkWidget **menus, GtkWidget *parent, GList **lists, const gchar *label, const dt_menus_t index, void *data, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gboolean(*checked_callback)(GtkWidget *widget), gboolean(*active_callback)(GtkWidget *widget), gboolean(*sensitive_callback)(GtkWidget *widget), guint key_val, GdkModifierType mods, GtkAccelGroup *accel_group)
 
void add_sub_sub_menu_entry (GtkWidget **menus, GtkWidget *parent, GList **lists, const gchar *label, const dt_menus_t index, void *data, gboolean(*action_callback)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data), gboolean(*checked_callback)(GtkWidget *widget), gboolean(*active_callback)(GtkWidget *widget), gboolean(*sensitive_callback)(GtkWidget *widget), guint key_val, GdkModifierType mods)
 
void add_menu_separator (GtkWidget *menu)
 
void add_sub_menu_separator (GtkWidget *parent)
 
voidget_custom_data (GtkWidget *widget)
 
GtkWidgetget_last_widget (GList **list)
 
gboolean has_selection ()
 
gboolean has_active_images ()
 
gboolean _is_lighttable ()
 
gboolean _is_darkroom ()
 
gboolean has_active_image_in_lighttable ()
 
gboolean dt_menu_is_image_in_dev (GList *imgs)
 
void dt_menu_apply_dev_history_update (dt_develop_t *dev)
 Reload the current darkroom history and refresh every dependent GUI.
 

Typedef Documentation

◆ dt_masks_form_gui_t

Definition at line 37 of file menu.c.

Function Documentation

◆ _activate_callback_to_action_callback()

static void _activate_callback_to_action_callback ( GtkMenuItem *  menu_item,
gpointer  user_data 
)
static

How to use:

  1. write callback functions returning a gboolean that will check the context to decide if the menu item should be insensitive, checked, active. These should only use the content of globally accessible structures like darktable.gui since they take no arguments.
  2. re-use the action callback functions already used for global keyboard shortcuts (actions/accels). Again, all inputs and internal functions should be globally accessible, for example using proxies.
  3. wire everything with the set_menu_entry function below. GUI states of the children menu items will be updated automatically everytime a top-level menu is opened.

Definition at line 53 of file menu.c.

References dt_menu_entry_t::accel_group, and dt_menu_entry_t::action_callback.

Referenced by set_menu_entry(), and update_entry().

◆ _is_darkroom()

gboolean _is_darkroom ( )

◆ _is_lighttable()

◆ _menu_entry_destroy()

static void _menu_entry_destroy ( GtkWidget widget,
gpointer  user_data 
)
static

Definition at line 94 of file menu.c.

References dt_free.

Referenced by set_menu_entry().

◆ _menu_icon_draw()

static gboolean _menu_icon_draw ( GtkWidget widget,
cairo_t *  cr,
gpointer  user_data 
)
static

◆ add_generic_sub_menu_entry()

void add_generic_sub_menu_entry ( GtkWidget **  menus,
GList **  lists,
const gchar *  label,
const dt_menus_t  index,
void data,
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)  action_callback,
gboolean(*)(GtkWidget *widget)  checked_callback,
gboolean(*)(GtkWidget *widget)  active_callback,
gboolean(*)(GtkWidget *widget)  sensitive_callback,
guint  key_val,
GdkModifierType  mods,
GtkAccelGroup *  accel_group 
)

◆ add_generic_sub_sub_menu_entry()

void add_generic_sub_sub_menu_entry ( GtkWidget **  menus,
GtkWidget parent,
GList **  lists,
const gchar *  label,
const dt_menus_t  index,
void data,
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)  action_callback,
gboolean(*)(GtkWidget *widget)  checked_callback,
gboolean(*)(GtkWidget *widget)  active_callback,
gboolean(*)(GtkWidget *widget)  sensitive_callback,
guint  key_val,
GdkModifierType  mods,
GtkAccelGroup *  accel_group 
)

Definition at line 566 of file menu.c.

References set_menu_entry(), and dt_menu_entry_t::widget.

Referenced by add_sub_sub_menu_entry(), and append_thumbnails().

◆ add_generic_top_menu_entry()

void add_generic_top_menu_entry ( GtkWidget menu_bar,
GtkWidget **  menus,
GList **  lists,
const dt_menus_t  index,
gchar *  label,
GtkAccelGroup *  accel_group,
const char *  accel_path_prefix 
)

◆ add_generic_top_submenu_entry()

void add_generic_top_submenu_entry ( GtkWidget **  menus,
GList **  lists,
const gchar *  label,
const dt_menus_t  index,
GtkAccelGroup *  accel_group 
)

◆ add_menu_separator()

void add_menu_separator ( GtkWidget menu)

◆ add_no_accel_sub_menu_entry()

void add_no_accel_sub_menu_entry ( GtkWidget **  menus,
GList **  lists,
const gchar *  label,
const dt_menus_t  index,
void data,
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)  action_callback,
gboolean(*)(GtkWidget *widget)  checked_callback,
gboolean(*)(GtkWidget *widget)  active_callback,
gboolean(*)(GtkWidget *widget)  sensitive_callback,
guint  key_val,
GdkModifierType  mods 
)

Definition at line 553 of file menu.c.

References add_generic_sub_menu_entry().

Referenced by append_file(), and append_views().

◆ add_sub_menu_entry()

void add_sub_menu_entry ( GtkWidget **  menus,
GList **  lists,
const gchar *  label,
const dt_menus_t  index,
void data,
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)  action_callback,
gboolean(*)(GtkWidget *widget)  checked_callback,
gboolean(*)(GtkWidget *widget)  active_callback,
gboolean(*)(GtkWidget *widget)  sensitive_callback,
guint  key_val,
GdkModifierType  mods 
)

◆ add_sub_menu_separator()

void add_sub_menu_separator ( GtkWidget parent)

Definition at line 605 of file menu.c.

Referenced by append_image(), and append_run().

◆ add_sub_sub_menu_entry()

void add_sub_sub_menu_entry ( GtkWidget **  menus,
GtkWidget parent,
GList **  lists,
const gchar *  label,
const dt_menus_t  index,
void data,
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)  action_callback,
gboolean(*)(GtkWidget *widget)  checked_callback,
gboolean(*)(GtkWidget *widget)  active_callback,
gboolean(*)(GtkWidget *widget)  sensitive_callback,
guint  key_val,
GdkModifierType  mods 
)

◆ add_top_menu_entry()

void add_top_menu_entry ( GtkWidget menu_bar,
GtkWidget **  menus,
GList **  lists,
const dt_menus_t  index,
gchar *  label 
)

◆ add_top_submenu_entry()

void add_top_submenu_entry ( GtkWidget **  menus,
GList **  lists,
const gchar *  label,
const dt_menus_t  index 
)

◆ ctx_gtk_check_menu_item_new_with_markup()

GtkWidget * ctx_gtk_check_menu_item_new_with_markup ( const char *  label,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data,
const gboolean  checked,
const gboolean  show_checkbox 
)

Definition at line 244 of file menu.c.

References DT_GUI_BOX_SPACING, FALSE, and TRUE.

Referenced by populate_masks_context_menu().

◆ ctx_gtk_check_menu_item_new_with_markup_and_pixbuf()

GtkWidget * ctx_gtk_check_menu_item_new_with_markup_and_pixbuf ( const char *  label,
GdkPixbuf *  icon,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data,
const gboolean  checked,
const gboolean  show_checkbox 
)

Definition at line 283 of file menu.c.

References DT_GUI_BOX_SPACING, FALSE, and TRUE.

Referenced by _blendop_masks_group_ctx_menu().

◆ ctx_gtk_menu_item_new_with_icon()

GtkWidget * ctx_gtk_menu_item_new_with_icon ( const char *  label,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data,
dt_menu_icon_t  icon 
)

◆ ctx_gtk_menu_item_new_with_icon_and_shortcut()

GtkWidget * ctx_gtk_menu_item_new_with_icon_and_shortcut ( const char *  label,
const char *  shortcut,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data,
dt_menu_icon_t  icon 
)

◆ ctx_gtk_menu_item_new_with_markup()

GtkWidget * ctx_gtk_menu_item_new_with_markup ( const char *  label,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data 
)

◆ ctx_gtk_menu_item_new_with_markup_and_pixbuf()

GtkWidget * ctx_gtk_menu_item_new_with_markup_and_pixbuf ( const char *  label,
GdkPixbuf *  icon,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data 
)

Definition at line 218 of file menu.c.

References DT_GUI_BOX_SPACING, FALSE, and TRUE.

Referenced by dt_masks_create_menu().

◆ ctx_gtk_menu_item_new_with_markup_and_shortcut()

GtkWidget * ctx_gtk_menu_item_new_with_markup_and_shortcut ( const char *  label,
const char *  shortcut,
GtkWidget menu,
void(*)(GtkWidget *widget, gpointer user_data)  activate_callback,
gpointer  user_data 
)

Definition at line 188 of file menu.c.

References DT_GUI_BOX_SPACING, FALSE, and TRUE.

Referenced by _brush_populate_context_menu(), and _polygon_populate_context_menu().

◆ dt_menu_apply_dev_history_update()

void dt_menu_apply_dev_history_update ( struct dt_develop_t dev)

◆ dt_menu_is_image_in_dev()

◆ get_custom_data()

◆ get_last_widget()

GtkWidget * get_last_widget ( GList **  list)

◆ has_active_image_in_lighttable()

gboolean has_active_image_in_lighttable ( )

Definition at line 653 of file menu.c.

References _is_lighttable(), and has_active_images().

Referenced by append_file().

◆ has_active_images()

◆ has_selection()

gboolean has_selection ( )

Definition at line 630 of file menu.c.

References darktable, dt_selection_get_length(), and darktable_t::selection.

Referenced by _search_entry_key_pressed(), and append_edit().

◆ set_menu_entry()

dt_menu_entry_t * set_menu_entry ( GtkWidget **  menus,
GList **  items_list,
const gchar *  label,
dt_menus_t  menu_index,
GtkMenu *  parent,
void data,
gboolean(*)(GtkAccelGroup *group, GObject *acceleratable, guint keyval, GdkModifierType mods, gpointer user_data)  action_callback,
gboolean(*)(GtkWidget *widget)  checked_callback,
gboolean(*)(GtkWidget *widget)  active_callback,
gboolean(*)(GtkWidget *widget)  sensitive_callback,
guint  key_val,
GdkModifierType  mods,
GtkAccelGroup *  accel_group 
)

How to use:

  1. write callback functions returning a gboolean that will check the context to decide if the menu item should be insensitive, checked, active. These should only use the content of globally accessible structures like darktable.gui since they take no arguments.
  2. re-use the action callback functions already used for global keyboard shortcuts (actions/accels). Again, all inputs and internal functions should be globally accessible, for example using proxies.
  3. wire everything with the set_menu_entry function below. GUI states of the children menu items will be updated automatically everytime a top-level menu is opened.

Definition at line 330 of file menu.c.

References _activate_callback_to_action_callback(), _menu_entry_destroy(), dt_menu_entry_t::accel_group, dt_gui_gtk_t::accels, dt_menu_entry_t::action_callback, dt_menu_entry_t::active_callback, dt_menu_entry_t::checked_callback, darktable, dt_accels_build_path(), dt_accels_new_action_shortcut(), dt_free, DT_MENU_ENTRY_CHECKBUTTON, DT_MENU_ENTRY_DEFAULT, FALSE, darktable_t::gui, IS_NULL_PTR, dt_menu_entry_t::menu, dt_menu_entry_t::sensitive_callback, strip_markup(), dt_menu_entry_t::style, and dt_menu_entry_t::widget.

Referenced by _styles_add_menu_entry(), _styles_get_submenu(), add_generic_sub_menu_entry(), add_generic_sub_sub_menu_entry(), and add_generic_top_submenu_entry().

◆ update_entry()

◆ update_menu_entries()

void update_menu_entries ( GtkWidget widget,
gpointer  user_data 
)

Definition at line 441 of file menu.c.

References update_entry().

Referenced by add_generic_top_menu_entry().