Ansel 0.0
A darktable fork - bloat + design vision
Loading...
Searching...
No Matches
menu.h File Reference
#include <gtk/gtk.h>
#include <glib.h>
+ Include dependency graph for menu.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  dt_menu_icon_data_t
 
struct  dt_menu_entry_t
 

Macros

#define MAKE_ACCEL_WRAPPER(cb)
 
#define GET_ACCEL_WRAPPER(cb)   cb##__accel
 

Typedefs

typedef enum dt_menu_icon_t dt_menu_icon_t
 
typedef struct dt_menu_icon_data_t dt_menu_icon_data_t
 
typedef enum dt_menus_t dt_menus_t
 
typedef enum dt_menu_entry_style_t dt_menu_entry_style_t
 
typedef struct dt_menu_entry_t dt_menu_entry_t
 

Enumerations

enum  dt_menu_icon_t {
  DT_MENU_ICON_NONE = 0 ,
  DT_MENU_ICON_CIRCLE ,
  DT_MENU_ICON_SQUARE
}
 
enum  dt_menus_t {
  DT_MENU_FILE = 0 ,
  DT_MENU_EDIT ,
  DT_MENU_SELECTION ,
  DT_MENU_IMAGE ,
  DT_MENU_STYLES ,
  DT_MENU_RUN ,
  DT_MENU_DISPLAY ,
  DT_MENU_ATELIERS ,
  DT_MENU_HELP ,
  DT_MENU_LAST
}
 
enum  dt_menu_entry_style_t {
  DT_MENU_ENTRY_DEFAULT = 0 ,
  DT_MENU_ENTRY_CHECKBUTTON = 1 ,
  DT_MENU_ENTRY_RADIOBUTTON = 2 ,
  DT_MENU_ENTRY_LAST
}
 

Functions

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_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_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_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 has_active_image_in_lighttable ()
 
void append_display (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_edit (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_file (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_help (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_image (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_run (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_select (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_styles (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
void append_views (GtkWidget **menus, GList **lists, const dt_menus_t index)
 
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)
 
gboolean dt_menu_is_image_in_dev (GList *imgs)
 
void dt_menu_apply_dev_history_update (struct dt_develop_t *dev)
 Reload the current darkroom history and refresh every dependent GUI.
 

Macro Definition Documentation

◆ GET_ACCEL_WRAPPER

#define GET_ACCEL_WRAPPER (   cb)    cb##__accel

Definition at line 244 of file menu.h.

◆ MAKE_ACCEL_WRAPPER

#define MAKE_ACCEL_WRAPPER (   cb)
Value:
static gboolean \
cb##__accel (GtkAccelGroup *group, \
GObject *acceleratable, \
guint keyval, \
GdkModifierType mods, \
gpointer user_data) \
{ \
cb(); \
return TRUE; \
}
#define TRUE
Definition ashift_lsd.c:162

Definition at line 232 of file menu.h.

Typedef Documentation

◆ dt_menu_entry_style_t

◆ dt_menu_entry_t

◆ dt_menu_icon_data_t

◆ dt_menu_icon_t

◆ dt_menus_t

typedef enum dt_menus_t dt_menus_t

Enumeration Type Documentation

◆ dt_menu_entry_style_t

Enumerator
DT_MENU_ENTRY_DEFAULT 
DT_MENU_ENTRY_CHECKBUTTON 
DT_MENU_ENTRY_RADIOBUTTON 
DT_MENU_ENTRY_LAST 

Definition at line 55 of file menu.h.

◆ dt_menu_icon_t

Enumerator
DT_MENU_ICON_NONE 
DT_MENU_ICON_CIRCLE 
DT_MENU_ICON_SQUARE 

Definition at line 29 of file menu.h.

◆ dt_menus_t

enum dt_menus_t
Enumerator
DT_MENU_FILE 
DT_MENU_EDIT 
DT_MENU_SELECTION 
DT_MENU_IMAGE 
DT_MENU_STYLES 
DT_MENU_RUN 
DT_MENU_DISPLAY 
DT_MENU_ATELIERS 
DT_MENU_HELP 
DT_MENU_LAST 

Definition at line 41 of file menu.h.

Function Documentation

◆ _is_lighttable()

◆ 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 
)

◆ append_display()

◆ append_edit()

◆ append_file()

◆ append_help()

◆ append_image()

◆ append_run()

◆ append_select()

◆ append_styles()

◆ append_views()

◆ 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().