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, const gboolean history_inited)
 

Macro Definition Documentation

◆ GET_ACCEL_WRAPPER

#define GET_ACCEL_WRAPPER (   cb)    cb##__accel

◆ 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

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 

◆ dt_menu_icon_t

Enumerator
DT_MENU_ICON_NONE 
DT_MENU_ICON_CIRCLE 
DT_MENU_ICON_SQUARE 

◆ 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 

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 
)

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

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

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

Referenced by append_image().

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

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

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

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

◆ dt_menu_apply_dev_history_update()

◆ dt_menu_is_image_in_dev()

◆ get_custom_data()

◆ get_last_widget()

◆ has_active_image_in_lighttable()

gboolean has_active_image_in_lighttable ( )

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 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.

References _activate_callback_to_action_callback(), 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, 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(), 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 
)

References update_entry().

Referenced by add_generic_top_menu_entry().