2017-04-15 06:32:05 -04:00
|
|
|
/*
|
|
|
|
* rofi
|
|
|
|
*
|
|
|
|
* MIT/X11 License
|
2023-01-14 07:02:35 -05:00
|
|
|
* Copyright © 2013-2023 Qball Cow <qball@gmpclient.org>
|
2017-04-15 06:32:05 -04:00
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
* a copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
* the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be
|
|
|
|
* included in all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2016-01-07 13:47:37 -05:00
|
|
|
#ifndef ROFI_MODE_H
|
|
|
|
#define ROFI_MODE_H
|
2017-10-03 14:50:38 -04:00
|
|
|
#include "rofi-types.h"
|
2021-08-19 07:34:01 -04:00
|
|
|
#include <cairo.h>
|
2017-11-21 10:04:59 -05:00
|
|
|
G_BEGIN_DECLS
|
2016-01-07 13:47:37 -05:00
|
|
|
/**
|
|
|
|
* @defgroup MODE Mode
|
|
|
|
*
|
|
|
|
* The 'object' that makes a mode in rofi.
|
|
|
|
* @{
|
|
|
|
*/
|
2016-11-15 02:24:06 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Type of a mode.
|
2016-11-15 02:24:27 -05:00
|
|
|
* Access should be done via mode_* functions.
|
2016-11-15 02:24:06 -05:00
|
|
|
*/
|
2017-10-21 05:18:52 -04:00
|
|
|
typedef struct rofi_mode Mode;
|
2016-01-07 13:47:37 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Enum used to sum the possible states of ROFI.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
typedef enum {
|
|
|
|
/** Exit. */
|
|
|
|
MODE_EXIT = 1000,
|
|
|
|
/** Skip to the next cycle-able dialog. */
|
|
|
|
NEXT_DIALOG = 1001,
|
|
|
|
/** Reload current DIALOG */
|
|
|
|
RELOAD_DIALOG = 1002,
|
|
|
|
/** Previous dialog */
|
|
|
|
PREVIOUS_DIALOG = 1003,
|
|
|
|
/** Reloads the dialog and unset user input */
|
|
|
|
RESET_DIALOG = 1004,
|
2016-01-07 13:47:37 -05:00
|
|
|
} ModeMode;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* State returned by the rofi window.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
typedef enum {
|
|
|
|
/** Entry is selected. */
|
|
|
|
MENU_OK = 0x00010000,
|
|
|
|
/** User canceled the operation. (e.g. pressed escape) */
|
|
|
|
MENU_CANCEL = 0x00020000,
|
|
|
|
/** User requested a mode switch */
|
|
|
|
MENU_NEXT = 0x00040000,
|
|
|
|
/** Custom (non-matched) input was entered. */
|
|
|
|
MENU_CUSTOM_INPUT = 0x00080000,
|
|
|
|
/** User wanted to delete entry from history. */
|
|
|
|
MENU_ENTRY_DELETE = 0x00100000,
|
|
|
|
/** User wants to jump to another switcher. */
|
|
|
|
MENU_QUICK_SWITCH = 0x00200000,
|
|
|
|
/** User wants to jump to custom command. */
|
|
|
|
MENU_CUSTOM_COMMAND = 0x00800000,
|
|
|
|
/** Go to the previous menu. */
|
|
|
|
MENU_PREVIOUS = 0x00400000,
|
|
|
|
/** Go to the complete. */
|
|
|
|
MENU_COMPLETE = 0x01000000,
|
|
|
|
/** Bindings specifics */
|
|
|
|
MENU_CUSTOM_ACTION = 0x10000000,
|
|
|
|
/** Mask */
|
|
|
|
MENU_LOWER_MASK = 0x0000FFFF
|
2016-01-07 13:47:37 -05:00
|
|
|
} MenuReturn;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param mode The mode to initialize
|
|
|
|
*
|
|
|
|
* Initialize mode
|
2016-01-08 03:16:59 -05:00
|
|
|
*
|
|
|
|
* @returns FALSE if there was a failure, TRUE if successful
|
2016-01-07 13:47:37 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int mode_init(Mode *mode);
|
2016-01-07 13:47:37 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param mode The mode to destroy
|
|
|
|
*
|
|
|
|
* Destroy the mode
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void mode_destroy(Mode *mode);
|
2016-01-07 13:47:37 -05:00
|
|
|
|
|
|
|
/**
|
2017-04-23 09:17:15 -04:00
|
|
|
* @param mode The mode to query
|
2016-01-07 13:47:37 -05:00
|
|
|
*
|
|
|
|
* Get the number of entries in the mode.
|
|
|
|
*
|
2018-05-14 09:46:34 -04:00
|
|
|
* @returns an unsigned int with the number of entries.
|
2016-01-07 13:47:37 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
unsigned int mode_get_num_entries(const Mode *mode);
|
2016-01-07 13:47:37 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
* @param selected_line The entry to query
|
|
|
|
* @param state The state of the entry [out]
|
2021-08-19 07:34:01 -04:00
|
|
|
* @param attribute_list List of extra (pango) attribute to apply when
|
|
|
|
* displaying. [out][null]
|
2016-01-07 13:47:37 -05:00
|
|
|
* @param get_entry If the should be returned.
|
|
|
|
*
|
2021-08-19 07:34:01 -04:00
|
|
|
* Returns the string as it should be displayed for the entry and the state of
|
|
|
|
* how it should be displayed.
|
2016-01-07 13:47:37 -05:00
|
|
|
*
|
2021-08-19 07:34:01 -04:00
|
|
|
* @returns allocated new string and state when get_entry is TRUE otherwise just
|
|
|
|
* the state.
|
2016-01-07 13:47:37 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
char *mode_get_display_value(const Mode *mode, unsigned int selected_line,
|
|
|
|
int *state, GList **attribute_list, int get_entry);
|
2016-01-07 15:27:20 -05:00
|
|
|
|
2017-04-12 11:58:32 -04:00
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
* @param selected_line The entry to query
|
2017-06-03 10:27:11 -04:00
|
|
|
* @param height The desired height of the icon.
|
2017-04-12 11:58:32 -04:00
|
|
|
*
|
|
|
|
* Returns the icon for the selected_line
|
|
|
|
*
|
|
|
|
* @returns allocated new cairo_surface_t if applicable
|
|
|
|
*/
|
2022-05-11 11:02:13 -04:00
|
|
|
cairo_surface_t *mode_get_icon(Mode *mode, unsigned int selected_line,
|
2022-07-22 18:28:55 -04:00
|
|
|
unsigned int height);
|
2017-04-12 11:58:32 -04:00
|
|
|
|
2016-01-07 15:27:20 -05:00
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
* @param selected_line The entry to query
|
|
|
|
*
|
2021-08-19 07:34:01 -04:00
|
|
|
* Return a string that can be used for completion. It has should have no
|
|
|
|
* markup.
|
2016-01-07 15:27:20 -05:00
|
|
|
*
|
|
|
|
* @returns allocated string.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
char *mode_get_completion(const Mode *mode, unsigned int selected_line);
|
2016-01-07 15:27:20 -05:00
|
|
|
|
|
|
|
/**
|
2016-01-08 03:29:15 -05:00
|
|
|
* @param mode The mode to query
|
2016-07-29 02:32:34 -04:00
|
|
|
* @param menu_retv The menu return value.
|
|
|
|
* @param input Pointer to the user input string. [in][out]
|
2016-01-07 15:27:20 -05:00
|
|
|
* @param selected_line the line selected by the user.
|
|
|
|
*
|
|
|
|
* Acts on the user interaction.
|
|
|
|
*
|
|
|
|
* @returns the next #ModeMode.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
ModeMode mode_result(Mode *mode, int menu_retv, char **input,
|
|
|
|
unsigned int selected_line);
|
2016-01-07 15:27:20 -05:00
|
|
|
|
|
|
|
/**
|
2016-01-08 03:29:15 -05:00
|
|
|
* @param mode The mode to query
|
2016-01-07 15:27:20 -05:00
|
|
|
* @param tokens The set of tokens to match against
|
|
|
|
* @param selected_line The index of the entry to match
|
|
|
|
*
|
|
|
|
* Match entry against the set of tokens.
|
|
|
|
*
|
|
|
|
* @returns TRUE if matches
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
int mode_token_match(const Mode *mode, rofi_int_matcher **tokens,
|
|
|
|
unsigned int selected_line);
|
2016-01-07 15:27:20 -05:00
|
|
|
|
|
|
|
/**
|
2016-01-08 03:29:15 -05:00
|
|
|
* @param mode The mode to query
|
2016-01-07 15:27:20 -05:00
|
|
|
*
|
|
|
|
* Get the name of the mode.
|
|
|
|
*
|
|
|
|
* @returns the name of the mode.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
const char *mode_get_name(const Mode *mode);
|
2016-01-07 15:27:20 -05:00
|
|
|
|
|
|
|
/**
|
2016-01-08 03:29:15 -05:00
|
|
|
* @param mode The mode to query
|
2016-01-07 15:27:20 -05:00
|
|
|
*
|
|
|
|
* Free the resources allocated for this mode.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void mode_free(Mode **mode);
|
2016-01-07 15:27:20 -05:00
|
|
|
|
2016-01-08 03:29:15 -05:00
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
*
|
|
|
|
* Helper functions for mode.
|
|
|
|
* Get the private data object.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void *mode_get_private_data(const Mode *mode);
|
2016-01-08 03:29:15 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
2016-07-29 02:32:34 -04:00
|
|
|
* @param pd Pointer to private data to attach to the mode.
|
2016-01-08 03:29:15 -05:00
|
|
|
*
|
|
|
|
* Helper functions for mode.
|
|
|
|
* Set the private data object.
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void mode_set_private_data(Mode *mode, void *pd);
|
2016-01-12 16:17:53 -05:00
|
|
|
|
2016-11-15 02:24:06 -05:00
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
*
|
|
|
|
* Get the name of the mode as it should be presented to the user.
|
|
|
|
*
|
|
|
|
* @return the user visible name of the mode
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
const char *mode_get_display_name(const Mode *mode);
|
2016-01-12 16:17:53 -05:00
|
|
|
|
2016-11-15 02:24:06 -05:00
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
*
|
2021-08-19 07:34:01 -04:00
|
|
|
* Should be called once for each mode. This adds the display-name configuration
|
|
|
|
* option for the mode.
|
2016-11-15 02:24:06 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
void mode_set_config(Mode *mode);
|
2016-11-15 02:24:06 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
2016-11-15 15:54:31 -05:00
|
|
|
* @param input The input to process
|
2016-11-15 02:24:06 -05:00
|
|
|
*
|
|
|
|
* This processes the input so it can be used for matching and sorting.
|
|
|
|
* This includes removing pango markup.
|
|
|
|
*
|
|
|
|
* @returns a newly allocated string
|
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
char *mode_preprocess_input(Mode *mode, const char *input);
|
2017-03-01 03:57:54 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param mode The mode to query
|
|
|
|
*
|
|
|
|
* Query the mode for a user display.
|
|
|
|
*
|
2021-08-19 07:34:01 -04:00
|
|
|
* @return a new allocated (valid pango markup) message to display (user should
|
|
|
|
* free).
|
2017-03-01 03:57:54 -05:00
|
|
|
*/
|
2021-08-19 07:34:01 -04:00
|
|
|
char *mode_get_message(const Mode *mode);
|
2020-10-12 15:39:36 -04:00
|
|
|
/**@}*/
|
2017-11-21 10:04:59 -05:00
|
|
|
G_END_DECLS
|
2016-01-07 13:47:37 -05:00
|
|
|
#endif
|