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 DT_GUI_ACTIONS_MENU_H
 
#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)
 

Macro Definition Documentation

◆ DT_GUI_ACTIONS_MENU_H

#define DT_GUI_ACTIONS_MENU_H

Definition at line 27 of file menu.h.

◆ GET_ACCEL_WRAPPER

#define GET_ACCEL_WRAPPER (   cb)    cb##__accel

Definition at line 239 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 227 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 589 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 576 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 628 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 
)

Definition at line 509 of file menu.c.

References add_generic_top_menu_entry(), and dt_gui_get_accels().

Referenced by dt_ui_init_global_menu().

◆ 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 241 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 280 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 215 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 185 of file menu.c.

References DT_GUI_BOX_SPACING, FALSE, and TRUE.

Referenced by _brush_populate_context_menu(), and _polygon_populate_context_menu().

◆ 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 676 of file menu.c.

References _is_lighttable(), and has_active_images().

Referenced by append_file().

◆ has_active_images()

◆ has_selection()

gboolean has_selection ( )

◆ 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 dt_gui_get_global() 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 327 of file menu.c.

References _activate_callback_to_action_callback(), _menu_entry_destroy(), dt_menu_entry_t::accel_group, dt_menu_entry_t::accel_path, dt_menu_entry_t::action_callback, dt_menu_entry_t::active_callback, dt_menu_entry_t::checked_callback, dt_accels_build_path(), dt_accels_display_mods(), dt_accels_new_action_shortcut(), dt_free, dt_gui_get_accels(), DT_MENU_ENTRY_CHECKBUTTON, DT_MENU_ENTRY_DEFAULT, FALSE, 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 464 of file menu.c.

References entries, and update_entry().

Referenced by add_generic_top_menu_entry().