Run indenter

This commit is contained in:
lbonn 2020-11-25 19:10:26 +01:00
parent 87b48ce755
commit 7d4c5e8bd9
18 changed files with 325 additions and 312 deletions

View file

@ -179,5 +179,5 @@ Settings config = {
.benchmark_ui = FALSE,
/** normalize match */
.normalize_match = FALSE
.normalize_match = FALSE
};

View file

@ -38,7 +38,7 @@
/** #Mode object representing the run dialog. */
extern Mode file_browser_mode;
Mode *create_new_file_browser (void);
Mode *create_new_file_browser ( void );
ModeMode file_browser_mode_completer ( Mode *sw, int mretv, char **input, unsigned int selected_line, char **path );
/**@}*/
#endif // ROFI_DIALOG_FILE_BROWSER_H

View file

@ -181,7 +181,7 @@ static ModeMode combi_mode_result ( Mode *sw, int mretv, char **input, unsigned
}
}
if ( ( mretv & MENU_CUSTOM_INPUT ) ) {
return mode_result ( pd->switchers[0].mode, mretv, input, selected_line );
return mode_result ( pd->switchers[0].mode, mretv, input, selected_line );
}
return MODE_EXIT;
}

View file

@ -736,11 +736,11 @@ static void drun_write_str ( FILE *fd, const char *str )
}
static void drun_write_integer ( FILE *fd, int32_t val )
{
fwrite ( &val,sizeof(val), 1, fd );
fwrite ( &val, sizeof ( val ), 1, fd );
}
static void drun_read_integer ( FILE *fd, int32_t *type )
{
if ( fread ( type, sizeof ( int32_t), 1, fd ) != 1 ) {
if ( fread ( type, sizeof ( int32_t ), 1, fd ) != 1 ) {
g_warning ( "Failed to read entry, cache corrupt?" );
return;
}
@ -821,7 +821,7 @@ static void write_cache ( DRunModePrivateData *pd, const char *cache_file )
drun_write_strv ( fd, entry->keywords );
drun_write_str ( fd, entry->comment );
drun_write_integer ( fd, (int32_t)entry->type );
drun_write_integer ( fd, (int32_t) entry->type );
}
fclose ( fd );
@ -893,7 +893,7 @@ static gboolean drun_read_cache ( DRunModePrivateData *pd, const char *cache_fil
drun_read_string ( fd, &( entry->comment ) );
int32_t type = 0;
drun_read_integer( fd, &( type ) );
drun_read_integer ( fd, &( type ) );
entry->type = type;
}
@ -1041,10 +1041,10 @@ static ModeMode drun_mode_result ( Mode *sw, int mretv, char **input, unsigned i
}
}
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input != NULL && *input[0] != '\0' ) {
RofiHelperExecuteContext context = { .name = NULL };
gboolean run_in_term = ( ( mretv & MENU_CUSTOM_ACTION ) == MENU_CUSTOM_ACTION );
RofiHelperExecuteContext context = { .name = NULL };
gboolean run_in_term = ( ( mretv & MENU_CUSTOM_ACTION ) == MENU_CUSTOM_ACTION );
// FIXME: We assume startup notification in terminals, not in others
if ( ! helper_execute_command ( NULL, *input, run_in_term, run_in_term ? &context : NULL ) ) {
if ( !helper_execute_command ( NULL, *input, run_in_term, run_in_term ? &context : NULL ) ) {
retv = RELOAD_DIALOG;
}
}

View file

@ -46,13 +46,13 @@
#include "rofi-icon-fetcher.h"
#define FILEBROWSER_CACHE_FILE "rofi3.filebrowsercache"
#define FILEBROWSER_CACHE_FILE "rofi3.filebrowsercache"
/**
* The internal data structure holding the private data of the TEST Mode.
*/
enum FBFileType {
enum FBFileType
{
UP,
DIRECTORY,
RFILE,
@ -64,30 +64,31 @@ const char *icon_name[NUM_FILE_TYPES] =
"folder",
"gtk-file"
};
typedef struct {
char *name;
char *path;
typedef struct
{
char *name;
char *path;
enum FBFileType type;
uint32_t icon_fetch_uid;
gboolean link;
gboolean link;
} FBFile;
typedef struct
{
GFile *current_dir;
FBFile *array;
unsigned int array_length;
GFile *current_dir;
FBFile *array;
unsigned int array_length;
} FileBrowserModePrivateData;
static void free_list ( FileBrowserModePrivateData *pd )
{
for ( unsigned int i = 0; i < pd->array_length; i++ ) {
FBFile *fb = & ( pd->array[i] );
FBFile *fb = &( pd->array[i] );
g_free ( fb->name );
g_free ( fb->path );
}
g_free (pd->array);
pd->array = NULL;
g_free ( pd->array );
pd->array = NULL;
pd->array_length = 0;
}
#include <sys/types.h>
@ -95,10 +96,10 @@ static void free_list ( FileBrowserModePrivateData *pd )
static gint compare ( gconstpointer a, gconstpointer b, G_GNUC_UNUSED gpointer data )
{
FBFile *fa = (FBFile*)a;
FBFile *fb = (FBFile*)b;
if ( fa->type != fb->type ){
return (fa->type - fb->type);
FBFile *fa = (FBFile*) a;
FBFile *fb = (FBFile*) b;
if ( fa->type != fb->type ) {
return fa->type - fb->type;
}
return g_strcmp0 ( fa->name, fb->name );
@ -112,85 +113,85 @@ static void get_file_browser ( Mode *sw )
* this gets called on plugin initialization.
*/
char *cdir = g_file_get_path ( pd->current_dir );
DIR *dir = opendir ( cdir );
DIR *dir = opendir ( cdir );
if ( dir ) {
struct dirent *rd = NULL;
while ((rd = readdir (dir)) != NULL )
{
if ( g_strcmp0 ( rd->d_name, ".." ) == 0 ){
pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile));
// Rofi expects utf-8, so lets convert the filename.
pd->array[pd->array_length].name = g_strdup ( ".." );
pd->array[pd->array_length].path = NULL;
pd->array[pd->array_length].type = UP;
pd->array[pd->array_length].icon_fetch_uid = 0;
pd->array[pd->array_length].link = FALSE;
pd->array_length++;
continue;
} else if ( rd->d_name[0] == '.' ) {
while ( ( rd = readdir ( dir ) ) != NULL ) {
if ( g_strcmp0 ( rd->d_name, ".." ) == 0 ) {
pd->array = g_realloc ( pd->array, ( pd->array_length + 1 ) * sizeof ( FBFile ) );
// Rofi expects utf-8, so lets convert the filename.
pd->array[pd->array_length].name = g_strdup ( ".." );
pd->array[pd->array_length].path = NULL;
pd->array[pd->array_length].type = UP;
pd->array[pd->array_length].icon_fetch_uid = 0;
pd->array[pd->array_length].link = FALSE;
pd->array_length++;
continue;
}
else if ( rd->d_name[0] == '.' ) {
continue;
}
switch ( rd->d_type )
{
case DT_BLK:
case DT_CHR:
case DT_FIFO:
case DT_UNKNOWN:
case DT_SOCK:
default:
break;
case DT_REG:
case DT_DIR:
pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile));
// Rofi expects utf-8, so lets convert the filename.
pd->array[pd->array_length].name = g_filename_to_utf8 ( rd->d_name, -1, NULL, NULL, NULL);
pd->array[pd->array_length].path = g_build_filename ( cdir, rd->d_name, NULL );
pd->array[pd->array_length].type = (rd->d_type == DT_DIR)? DIRECTORY: RFILE;
pd->array[pd->array_length].icon_fetch_uid = 0;
pd->array[pd->array_length].link = FALSE;
pd->array_length++;
break;
case DT_LNK:
pd->array = g_realloc ( pd->array, (pd->array_length+1)*sizeof(FBFile));
// Rofi expects utf-8, so lets convert the filename.
pd->array[pd->array_length].name = g_filename_to_utf8 ( rd->d_name, -1, NULL, NULL, NULL);
pd->array[pd->array_length].path = g_build_filename ( cdir, rd->d_name, NULL );
pd->array[pd->array_length].icon_fetch_uid = 0;
pd->array[pd->array_length].link = TRUE;
// Default to file.
pd->array[pd->array_length].type = RFILE;
{
// If we have link, use a stat to fine out what it is, if we fail, we mark it as file.
// TODO have a 'broken link' mode?
// Convert full path to right encoding.
char *file = g_filename_from_utf8(pd->array[pd->array_length].path,-1, NULL, NULL, NULL );
if ( file ) {
struct stat statbuf;
if ( stat(file, &statbuf ) == 0 ) {
if ( S_ISDIR(statbuf.st_mode ) ) {
pd->array[pd->array_length].type = DIRECTORY;
} else if ( S_ISREG ( statbuf.st_mode ) ) {
pd->array[pd->array_length].type = RFILE;
}
} else {
g_warning("Failed to stat file: %s, %s" , file, strerror(errno));
case DT_BLK:
case DT_CHR:
case DT_FIFO:
case DT_UNKNOWN:
case DT_SOCK:
default:
break;
case DT_REG:
case DT_DIR:
pd->array = g_realloc ( pd->array, ( pd->array_length + 1 ) * sizeof ( FBFile ) );
// Rofi expects utf-8, so lets convert the filename.
pd->array[pd->array_length].name = g_filename_to_utf8 ( rd->d_name, -1, NULL, NULL, NULL );
pd->array[pd->array_length].path = g_build_filename ( cdir, rd->d_name, NULL );
pd->array[pd->array_length].type = ( rd->d_type == DT_DIR )? DIRECTORY: RFILE;
pd->array[pd->array_length].icon_fetch_uid = 0;
pd->array[pd->array_length].link = FALSE;
pd->array_length++;
break;
case DT_LNK:
pd->array = g_realloc ( pd->array, ( pd->array_length + 1 ) * sizeof ( FBFile ) );
// Rofi expects utf-8, so lets convert the filename.
pd->array[pd->array_length].name = g_filename_to_utf8 ( rd->d_name, -1, NULL, NULL, NULL );
pd->array[pd->array_length].path = g_build_filename ( cdir, rd->d_name, NULL );
pd->array[pd->array_length].icon_fetch_uid = 0;
pd->array[pd->array_length].link = TRUE;
// Default to file.
pd->array[pd->array_length].type = RFILE;
{
// If we have link, use a stat to fine out what it is, if we fail, we mark it as file.
// TODO have a 'broken link' mode?
// Convert full path to right encoding.
char *file = g_filename_from_utf8 ( pd->array[pd->array_length].path, -1, NULL, NULL, NULL );
if ( file ) {
struct stat statbuf;
if ( stat ( file, &statbuf ) == 0 ) {
if ( S_ISDIR ( statbuf.st_mode ) ) {
pd->array[pd->array_length].type = DIRECTORY;
}
else if ( S_ISREG ( statbuf.st_mode ) ) {
pd->array[pd->array_length].type = RFILE;
}
g_free ( file );
}
else {
g_warning ( "Failed to stat file: %s, %s", file, strerror ( errno ) );
}
g_free ( file );
}
pd->array_length++;
break;
}
}
pd->array_length++;
break;
}
}
closedir ( dir );
}
g_qsort_with_data ( pd->array, pd->array_length, sizeof (FBFile ), compare, NULL );
g_qsort_with_data ( pd->array, pd->array_length, sizeof ( FBFile ), compare, NULL );
}
static int file_browser_mode_init ( Mode *sw )
{
/**
@ -202,16 +203,16 @@ static int file_browser_mode_init ( Mode *sw )
{
char *path = g_build_filename ( cache_dir, FILEBROWSER_CACHE_FILE, NULL );
char *file = NULL;
if ( g_file_get_contents (path, &file, NULL, NULL ) ) {
if ( g_file_test ( file, G_FILE_TEST_IS_DIR ) ){
pd->current_dir = g_file_new_for_path( file );
if ( g_file_get_contents ( path, &file, NULL, NULL ) ) {
if ( g_file_test ( file, G_FILE_TEST_IS_DIR ) ) {
pd->current_dir = g_file_new_for_path ( file );
}
g_free ( file );
}
// Store it based on the unique identifiers (desktop_id).
g_free ( path );
if ( pd->current_dir == NULL ) {
pd->current_dir = g_file_new_for_path(g_get_home_dir () );
pd->current_dir = g_file_new_for_path ( g_get_home_dir () );
}
}
// Load content.
@ -227,73 +228,76 @@ static unsigned int file_browser_mode_get_num_entries ( const Mode *sw )
static ModeMode file_browser_mode_result ( Mode *sw, int mretv, char **input, unsigned int selected_line )
{
ModeMode retv = MODE_EXIT;
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
ModeMode retv = MODE_EXIT;
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
if ( mretv & MENU_NEXT ) {
retv = NEXT_DIALOG;
} else if ( mretv & MENU_PREVIOUS ) {
}
else if ( mretv & MENU_PREVIOUS ) {
retv = PREVIOUS_DIALOG;
} else if ( mretv & MENU_QUICK_SWITCH ) {
}
else if ( mretv & MENU_QUICK_SWITCH ) {
retv = ( mretv & MENU_LOWER_MASK );
} else if ( ( mretv & MENU_OK ) ) {
if ( selected_line < pd->array_length )
{
}
else if ( ( mretv & MENU_OK ) ) {
if ( selected_line < pd->array_length ) {
if ( pd->array[selected_line].type == UP ) {
GFile *new = g_file_get_parent ( pd->current_dir );
if ( new ){
g_object_unref ( pd->current_dir );
pd->current_dir = new;
free_list (pd);
get_file_browser ( sw );
return RESET_DIALOG;
}
} else if ( pd->array[selected_line].type == DIRECTORY ) {
if ( new ) {
g_object_unref ( pd->current_dir );
pd->current_dir = new;
free_list ( pd );
get_file_browser ( sw );
return RESET_DIALOG;
}
}
else if ( pd->array[selected_line].type == DIRECTORY ) {
char *path = g_build_filename ( cache_dir, FILEBROWSER_CACHE_FILE, NULL );
g_file_set_contents (path, pd->array[selected_line].path, -1, NULL );
g_free(path);
g_file_set_contents ( path, pd->array[selected_line].path, -1, NULL );
g_free ( path );
GFile *new = g_file_new_for_path ( pd->array[selected_line].path );
g_object_unref ( pd->current_dir );
pd->current_dir = new;
free_list (pd);
free_list ( pd );
get_file_browser ( sw );
return RESET_DIALOG;
} else if ( pd->array[selected_line].type == RFILE ) {
char *d = g_filename_from_utf8 (pd->array[selected_line].path, -1, NULL, NULL, NULL);
char *cmd = g_strdup_printf("xdg-open '%s'", d );
g_free(d);
}
else if ( pd->array[selected_line].type == RFILE ) {
char *d = g_filename_from_utf8 ( pd->array[selected_line].path, -1, NULL, NULL, NULL );
char *cmd = g_strdup_printf ( "xdg-open '%s'", d );
g_free ( d );
char *cdir = g_file_get_path ( pd->current_dir );
helper_execute_command ( cdir,cmd, FALSE,NULL );
helper_execute_command ( cdir, cmd, FALSE, NULL );
g_free ( cdir );
g_free ( cmd );
return MODE_EXIT;
}
}
retv = RELOAD_DIALOG;
} else if ( (mretv&MENU_CUSTOM_INPUT) && *input ) {
char *p = rofi_expand_path ( *input );
}
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input ) {
char *p = rofi_expand_path ( *input );
char *dir = g_filename_from_utf8 ( p, -1, NULL, NULL, NULL );
g_free (p);
if ( g_file_test ( dir, G_FILE_TEST_EXISTS ) )
{
if ( g_file_test ( dir, G_FILE_TEST_IS_DIR ) ){
g_free ( p );
if ( g_file_test ( dir, G_FILE_TEST_EXISTS ) ) {
if ( g_file_test ( dir, G_FILE_TEST_IS_DIR ) ) {
g_object_unref ( pd->current_dir );
pd->current_dir = g_file_new_for_path ( dir );
g_free ( dir );
free_list (pd);
free_list ( pd );
get_file_browser ( sw );
return RESET_DIALOG;
}
}
g_free ( dir );
retv = RELOAD_DIALOG;
} else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) {
}
else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) {
retv = RELOAD_DIALOG;
}
return retv;
}
static void file_browser_mode_destroy ( Mode *sw )
{
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
@ -310,17 +314,21 @@ static char *_get_display_value ( const Mode *sw, unsigned int selected_line, G_
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
// Only return the string if requested, otherwise only set state.
if ( !get_entry ) return NULL;
if ( pd->array[selected_line].type == UP ){
return g_strdup( " ..");
} else {
if ( !get_entry ) {
return NULL;
}
if ( pd->array[selected_line].type == UP ) {
return g_strdup ( " .." );
}
else {
if ( pd->array[selected_line].link ) {
return g_strconcat ( "@", pd->array[selected_line].name, NULL);
} else {
return g_strdup ( pd->array[selected_line].name);
return g_strconcat ( "@", pd->array[selected_line].name, NULL );
}
else {
return g_strdup ( pd->array[selected_line].name );
}
}
return g_strdup("n/a");
return g_strdup ( "n/a" );
}
/**
@ -337,40 +345,39 @@ static int file_browser_token_match ( const Mode *sw, rofi_int_matcher **tokens,
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
// Call default matching function.
return helper_token_match ( tokens, pd->array[index].name);
return helper_token_match ( tokens, pd->array[index].name );
}
const char * const image_exts[] = {".png",".PNG",".jpg",".JPG",".jpeg",".JPEG",".svg",".SVG"};
const char * const image_exts[] = { ".png", ".PNG", ".jpg", ".JPG", ".jpeg", ".JPEG", ".svg", ".SVG" };
static gboolean file_browser_is_image ( const char * const path )
{
if ( path == NULL ) {
return FALSE;
}
const char *suf = strrchr(path, '.');
const char *suf = strrchr ( path, '.' );
if ( suf == NULL ) {
return FALSE;
}
for ( uint32_t i = 0; i < (sizeof (image_exts)/sizeof(char*)); i++ ) {
if ( g_strcmp0(suf,image_exts[i]) == 0 ) {
for ( uint32_t i = 0; i < ( sizeof ( image_exts ) / sizeof ( char* ) ); i++ ) {
if ( g_strcmp0 ( suf, image_exts[i] ) == 0 ) {
return TRUE;
}
}
return FALSE;
}
static cairo_surface_t *_get_icon ( const Mode *sw, unsigned int selected_line, int height )
{
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
g_return_val_if_fail ( pd->array != NULL, NULL );
FBFile *dr = &( pd->array[selected_line] );
FBFile *dr = &( pd->array[selected_line] );
if ( dr->icon_fetch_uid > 0 ) {
return rofi_icon_fetcher_get ( dr->icon_fetch_uid );
}
if ( file_browser_is_image ( dr->path ) ){
dr->icon_fetch_uid = rofi_icon_fetcher_query ( dr->path, height );
} else {
if ( file_browser_is_image ( dr->path ) ) {
dr->icon_fetch_uid = rofi_icon_fetcher_query ( dr->path, height );
}
else {
dr->icon_fetch_uid = rofi_icon_fetcher_query ( icon_name[dr->type], height );
}
return rofi_icon_fetcher_get ( dr->icon_fetch_uid );
@ -381,25 +388,24 @@ static char * _get_message ( const Mode *sw )
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
if ( pd->current_dir ) {
char *dirname = g_file_get_parse_name ( pd->current_dir );
char *str = g_markup_printf_escaped("<b>Current directory:</b> %s", dirname);
char *str = g_markup_printf_escaped ( "<b>Current directory:</b> %s", dirname );
g_free ( dirname );
return str;
}
return "n/a";
}
static char *_get_completion ( const Mode *sw, unsigned int index )
{
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
char *d = g_strescape ( pd->array[index].path,NULL );
char *d = g_strescape ( pd->array[index].path, NULL );
return d;
}
Mode *create_new_file_browser (void )
Mode *create_new_file_browser ( void )
{
Mode *sw = g_malloc0(sizeof(Mode));
Mode *sw = g_malloc0 ( sizeof ( Mode ) );
*sw = file_browser_mode;
@ -410,58 +416,62 @@ Mode *create_new_file_browser (void )
#if 0
ModeMode file_browser_mode_completer ( Mode *sw, int mretv, char **input, unsigned int selected_line, char **path )
{
ModeMode retv = MODE_EXIT;
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
ModeMode retv = MODE_EXIT;
FileBrowserModePrivateData *pd = (FileBrowserModePrivateData *) mode_get_private_data ( sw );
if ( mretv & MENU_NEXT ) {
retv = NEXT_DIALOG;
} else if ( mretv & MENU_PREVIOUS ) {
}
else if ( mretv & MENU_PREVIOUS ) {
retv = PREVIOUS_DIALOG;
} else if ( mretv & MENU_QUICK_SWITCH ) {
}
else if ( mretv & MENU_QUICK_SWITCH ) {
retv = ( mretv & MENU_LOWER_MASK );
} else if ( ( mretv & MENU_OK ) ) {
if ( selected_line < pd->array_length )
{
}
else if ( ( mretv & MENU_OK ) ) {
if ( selected_line < pd->array_length ) {
if ( pd->array[selected_line].type == UP ) {
GFile *new = g_file_get_parent ( pd->current_dir );
if ( new ){
g_object_unref ( pd->current_dir );
pd->current_dir = new;
free_list (pd);
get_file_browser ( sw );
return RESET_DIALOG;
}
} else if ( pd->array[selected_line].type == DIRECTORY ) {
if ( new ) {
g_object_unref ( pd->current_dir );
pd->current_dir = new;
free_list ( pd );
get_file_browser ( sw );
return RESET_DIALOG;
}
}
else if ( pd->array[selected_line].type == DIRECTORY ) {
GFile *new = g_file_new_for_path ( pd->array[selected_line].path );
g_object_unref ( pd->current_dir );
pd->current_dir = new;
free_list (pd);
free_list ( pd );
get_file_browser ( sw );
return RESET_DIALOG;
} else if ( pd->array[selected_line].type == RFILE ) {
*path = g_strescape ( pd->array[selected_line].path,NULL );
}
else if ( pd->array[selected_line].type == RFILE ) {
*path = g_strescape ( pd->array[selected_line].path, NULL );
return MODE_EXIT;
}
}
retv = RELOAD_DIALOG;
} else if ( (mretv&MENU_CUSTOM_INPUT) && *input ) {
char *p = rofi_expand_path ( *input );
}
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input ) {
char *p = rofi_expand_path ( *input );
char *dir = g_filename_from_utf8 ( p, -1, NULL, NULL, NULL );
g_free (p);
if ( g_file_test ( dir, G_FILE_TEST_EXISTS ) )
{
if ( g_file_test ( dir, G_FILE_TEST_IS_DIR ) ){
g_free ( p );
if ( g_file_test ( dir, G_FILE_TEST_EXISTS ) ) {
if ( g_file_test ( dir, G_FILE_TEST_IS_DIR ) ) {
g_object_unref ( pd->current_dir );
pd->current_dir = g_file_new_for_path ( dir );
g_free ( dir );
free_list (pd);
free_list ( pd );
get_file_browser ( sw );
return RESET_DIALOG;
}
}
g_free ( dir );
retv = RELOAD_DIALOG;
} else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) {
}
else if ( ( mretv & MENU_ENTRY_DELETE ) == MENU_ENTRY_DELETE ) {
retv = RELOAD_DIALOG;
}
return retv;

View file

@ -376,12 +376,12 @@ static ModeMode run_mode_result ( Mode *sw, int mretv, char **input, unsigned in
if ( ( mretv & MENU_OK ) && rmpd->cmd_list[selected_line] != NULL ) {
if ( !exec_cmd ( rmpd->cmd_list[selected_line], run_in_term ) ) {
retv = RELOAD_DIALOG;
retv = RELOAD_DIALOG;
}
}
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input != NULL && *input[0] != '\0' ) {
if ( !exec_cmd ( *input, run_in_term ) ) {
retv = RELOAD_DIALOG;
retv = RELOAD_DIALOG;
}
}
else if ( ( mretv & MENU_ENTRY_DELETE ) && rmpd->cmd_list[selected_line] ) {

View file

@ -279,19 +279,19 @@ static ModeMode script_mode_result ( Mode *sw, int mretv, char **input, unsigned
unsigned int new_length = 0;
if ( ( mretv & MENU_CUSTOM_COMMAND ) ) {
//retv = 1+( mretv & MENU_LOWER_MASK );
script_mode_reset_highlight ( sw );
if ( selected_line != UINT32_MAX ) {
new_list = execute_executor ( sw, rmpd->cmd_list[selected_line].entry, &new_length, 10 + ( mretv & MENU_LOWER_MASK ), &( rmpd->cmd_list[selected_line] ) );
}
else {
if ( rmpd->no_custom == FALSE ) {
new_list = execute_executor ( sw, *input, &new_length, 10 + ( mretv & MENU_LOWER_MASK ), NULL );
//retv = 1+( mretv & MENU_LOWER_MASK );
script_mode_reset_highlight ( sw );
if ( selected_line != UINT32_MAX ) {
new_list = execute_executor ( sw, rmpd->cmd_list[selected_line].entry, &new_length, 10 + ( mretv & MENU_LOWER_MASK ), &( rmpd->cmd_list[selected_line] ) );
}
else {
return RELOAD_DIALOG;
if ( rmpd->no_custom == FALSE ) {
new_list = execute_executor ( sw, *input, &new_length, 10 + ( mretv & MENU_LOWER_MASK ), NULL );
}
else {
return RELOAD_DIALOG;
}
}
}
}
else if ( ( mretv & MENU_OK ) && rmpd->cmd_list[selected_line].entry != NULL ) {
if ( rmpd->cmd_list[selected_line].nonselectable ) {

View file

@ -698,21 +698,21 @@ static ModeMode window_mode_result ( Mode *sw, int mretv, G_GNUC_UNUSED char **i
xcb_flush ( xcb->connection );
}
else if ( ( mretv & MENU_CUSTOM_INPUT ) && *input != NULL && *input[0] != '\0' ) {
GError *error = NULL;
gboolean run_in_term = ( ( mretv & MENU_CUSTOM_ACTION ) == MENU_CUSTOM_ACTION );
gsize lf_cmd_size = 0;
gchar *lf_cmd = g_locale_from_utf8 ( *input, -1, NULL, &lf_cmd_size, &error );
if ( error != NULL ) {
g_warning ( "Failed to convert command to locale encoding: %s", error->message );
g_error_free ( error );
return RELOAD_DIALOG;
}
GError *error = NULL;
gboolean run_in_term = ( ( mretv & MENU_CUSTOM_ACTION ) == MENU_CUSTOM_ACTION );
gsize lf_cmd_size = 0;
gchar *lf_cmd = g_locale_from_utf8 ( *input, -1, NULL, &lf_cmd_size, &error );
if ( error != NULL ) {
g_warning ( "Failed to convert command to locale encoding: %s", error->message );
g_error_free ( error );
return RELOAD_DIALOG;
}
RofiHelperExecuteContext context = { .name = NULL };
if ( ! helper_execute_command ( NULL, lf_cmd, run_in_term, run_in_term ? &context : NULL ) ) {
retv = RELOAD_DIALOG;
}
g_free ( lf_cmd );
RofiHelperExecuteContext context = { .name = NULL };
if ( !helper_execute_command ( NULL, lf_cmd, run_in_term, run_in_term ? &context : NULL ) ) {
retv = RELOAD_DIALOG;
}
g_free ( lf_cmd );
}
return retv;
}

View file

@ -180,43 +180,44 @@ static gchar *fuzzy_to_regex ( const char * input )
return retv;
}
static char *utf8_helper_simplify_string ( const char *s)
static char *utf8_helper_simplify_string ( const char *s )
{
gunichar buf2[G_UNICHAR_MAX_DECOMPOSITION_LENGTH] = {0,};
char buf[6] = {0,};
// Compose the string in maximally composed form.
char * str = g_malloc0((g_utf8_strlen(s,0)*6+2));
char *striter = str;
for ( const char *iter = s; iter && *iter; iter = g_utf8_next_char ( iter )) {
gunichar uc = g_utf8_get_char ( iter );
int l = 0;
gsize dl = g_unichar_fully_decompose ( uc, FALSE, buf2, G_UNICHAR_MAX_DECOMPOSITION_LENGTH) ;
if ( dl ) {
l = g_unichar_to_utf8 ( buf2[0], buf);
} else {
l = g_unichar_to_utf8 ( uc, buf);
gunichar buf2[G_UNICHAR_MAX_DECOMPOSITION_LENGTH] = { 0, };
char buf[6] = { 0, };
// Compose the string in maximally composed form.
char * str = g_malloc0 ( ( g_utf8_strlen ( s, 0 ) * 6 + 2 ) );
char *striter = str;
for ( const char *iter = s; iter && *iter; iter = g_utf8_next_char ( iter ) ) {
gunichar uc = g_utf8_get_char ( iter );
int l = 0;
gsize dl = g_unichar_fully_decompose ( uc, FALSE, buf2, G_UNICHAR_MAX_DECOMPOSITION_LENGTH );
if ( dl ) {
l = g_unichar_to_utf8 ( buf2[0], buf );
}
else {
l = g_unichar_to_utf8 ( uc, buf );
}
memcpy ( striter, buf, l );
striter += l;
}
memcpy(striter, buf, l);
striter+=l;
}
return str;
return str;
}
// Macro for quickly generating regex for matching.
static inline GRegex * R ( const char *s, int case_sensitive )
{
if ( config.normalize_match ) {
char *str = utf8_helper_simplify_string ( s );
if ( config.normalize_match ) {
char *str = utf8_helper_simplify_string ( s );
GRegex *r = g_regex_new ( str, G_REGEX_OPTIMIZE | ( ( case_sensitive ) ? 0 : G_REGEX_CASELESS ), 0, NULL );
GRegex *r = g_regex_new ( str, G_REGEX_OPTIMIZE | ( ( case_sensitive ) ? 0 : G_REGEX_CASELESS ), 0, NULL );
g_free ( str );
return r;
} else {
return g_regex_new ( s, G_REGEX_OPTIMIZE | ( ( case_sensitive ) ? 0 : G_REGEX_CASELESS ), 0, NULL );
}
g_free ( str );
return r;
}
else {
return g_regex_new ( s, G_REGEX_OPTIMIZE | ( ( case_sensitive ) ? 0 : G_REGEX_CASELESS ), 0, NULL );
}
}
static rofi_int_matcher * create_regex ( const char *input, int case_sensitive )
@ -415,7 +416,7 @@ PangoAttrList *helper_token_match_get_pango_attr ( RofiHighlightColorStyle th, r
{
// Disable highlighting for normalize match, not supported atm.
if ( config.normalize_match ) {
return retv;
return retv;
}
// Do a tokenized match.
if ( tokens ) {
@ -490,19 +491,20 @@ int helper_token_match ( rofi_int_matcher* const *tokens, const char *input )
int match = TRUE;
// Do a tokenized match.
if ( tokens ) {
if ( config.normalize_match ) {
char *r = utf8_helper_simplify_string(input);
for ( int j = 0; match && tokens[j]; j++ ) {
match = g_regex_match ( tokens[j]->regex, r, 0, NULL );
match ^= tokens[j]->invert;
if ( config.normalize_match ) {
char *r = utf8_helper_simplify_string ( input );
for ( int j = 0; match && tokens[j]; j++ ) {
match = g_regex_match ( tokens[j]->regex, r, 0, NULL );
match ^= tokens[j]->invert;
}
g_free ( r );
}
g_free(r);
} else {
for ( int j = 0; match && tokens[j]; j++ ) {
match = g_regex_match ( tokens[j]->regex, input, 0, NULL );
match ^= tokens[j]->invert;
else {
for ( int j = 0; match && tokens[j]; j++ ) {
match = g_regex_match ( tokens[j]->regex, input, 0, NULL );
match ^= tokens[j]->invert;
}
}
}
}
return match;
}

View file

@ -103,7 +103,7 @@ ModeMode mode_result ( Mode *mode, int menu_retv, char **input, unsigned int sel
return PREVIOUS_DIALOG;
}
else if ( menu_retv & MENU_QUICK_SWITCH ) {
return ( menu_retv & MENU_LOWER_MASK );
return menu_retv & MENU_LOWER_MASK;
}
g_assert ( mode != NULL );

View file

@ -173,24 +173,25 @@ static cairo_surface_t* cairo_image_surface_create_from_jpeg_private ( struct jp
return surface;
}
struct jpegErrorManager {
struct jpegErrorManager
{
/* "public" fields */
struct jpeg_error_mgr pub;
/* for return to caller */
jmp_buf setjmp_buffer;
jmp_buf setjmp_buffer;
};
char jpegLastErrorMsg[JMSG_LENGTH_MAX];
static void jpegErrorExit (j_common_ptr cinfo)
static void jpegErrorExit ( j_common_ptr cinfo )
{
/* cinfo->err actually points to a jpegErrorManager struct */
struct jpegErrorManager* myerr = (struct jpegErrorManager*) cinfo->err;
/* Create the message */
( *(cinfo->err->format_message) ) (cinfo, jpegLastErrorMsg);
( *( cinfo->err->format_message ) )( cinfo, jpegLastErrorMsg );
g_warning ( jpegLastErrorMsg );
/* Jump to the setjmp point */
longjmp(myerr->setjmp_buffer, 1);
longjmp ( myerr->setjmp_buffer, 1 );
}
static cairo_surface_t* cairo_image_surface_create_from_jpeg ( const char* file )
@ -204,14 +205,14 @@ static cairo_surface_t* cairo_image_surface_create_from_jpeg ( const char* file
}
struct jpegErrorManager jerr;
cinfo.err = jpeg_std_error( &jerr.pub);
cinfo.err = jpeg_std_error ( &jerr.pub );
jerr.pub.error_exit = jpegErrorExit;
/* Establish the setjmp return context for my_error_exit to use. */
if (setjmp(jerr.setjmp_buffer)) {
/* If we get here, the JPEG code has signaled an error. */
jpeg_destroy_decompress(&cinfo);
fclose(infile);
return NULL;
if ( setjmp ( jerr.setjmp_buffer ) ) {
/* If we get here, the JPEG code has signaled an error. */
jpeg_destroy_decompress ( &cinfo );
fclose ( infile );
return NULL;
}
jpeg_create_decompress ( &cinfo );
@ -256,11 +257,11 @@ static void rofi_icon_fetcher_worker ( thread_state *sdata, G_GNUC_UNUSED gpoint
icon_surf = cairo_image_surface_create_from_png ( icon_path );
}
else if ( g_str_has_suffix ( icon_path, ".jpeg" ) || g_str_has_suffix ( icon_path, ".jpg" ) ||
g_str_has_suffix ( icon_path, ".JPEG" ) || g_str_has_suffix ( icon_path, ".JPG" )
) {
g_str_has_suffix ( icon_path, ".JPEG" ) || g_str_has_suffix ( icon_path, ".JPG" )
) {
icon_surf = cairo_image_surface_create_from_jpeg ( icon_path );
}
else if ( g_str_has_suffix ( icon_path, ".svg" ) || g_str_has_suffix ( icon_path, ".SVG" ) ) {
else if ( g_str_has_suffix ( icon_path, ".svg" ) || g_str_has_suffix ( icon_path, ".SVG" ) ) {
icon_surf = cairo_image_surface_create_from_svg ( icon_path, sentry->size );
}
else {

View file

@ -208,7 +208,7 @@ static void run_switcher ( ModeMode mode )
void process_result ( RofiViewState *state )
{
Mode *sw = state->sw;
// rofi_view_set_active ( NULL );
// rofi_view_set_active ( NULL );
if ( sw != NULL ) {
unsigned int selected_line = rofi_view_get_selected_line ( state );;
MenuReturn mretv = rofi_view_get_return_value ( state );
@ -248,15 +248,16 @@ void process_result ( RofiViewState *state )
rofi_view_switch_mode ( state, modi[mode] );
curr_switcher = mode;
return;
} else {
// On exit, free current view, and pop to one above.
rofi_view_remove_active ( state );
rofi_view_free ( state );
return;
}
else {
// On exit, free current view, and pop to one above.
rofi_view_remove_active ( state );
rofi_view_free ( state );
return;
}
}
// rofi_view_set_active ( NULL );
rofi_view_remove_active ( state );
rofi_view_remove_active ( state );
rofi_view_free ( state );
}

View file

@ -477,12 +477,13 @@ static void rofi_theme_print_index ( ThemeWidget *widget, int index )
gpointer key, value;
if ( widget->media ) {
printf("%s {\n", widget->name );
printf ( "%s {\n", widget->name );
for ( unsigned int i = 0; i < widget->num_widgets; i++ ) {
rofi_theme_print_index ( widget->widgets[i], index+4 );
rofi_theme_print_index ( widget->widgets[i], index + 4 );
}
printf("}\n");
} else {
printf ( "}\n" );
}
else {
if ( widget->properties ) {
GList *list = NULL;
ThemeWidget *w = widget;
@ -497,7 +498,7 @@ static void rofi_theme_print_index ( ThemeWidget *widget, int index )
w = w->parent;
}
if ( g_list_length ( list ) > 0 ) {
printf("%*s", index, "");
printf ( "%*s", index, "" );
for ( GList *iter = g_list_first ( list ); iter != NULL; iter = g_list_next ( iter ) ) {
char *name = (char *) iter->data;
fputs ( name, stdout );
@ -522,7 +523,7 @@ static void rofi_theme_print_index ( ThemeWidget *widget, int index )
g_hash_table_iter_init ( &iter, widget->properties );
while ( g_hash_table_iter_next ( &iter, &key, &value ) ) {
Property *p = (Property *) value;
rofi_theme_print_property_index ( property_name_length, index+4, p );
rofi_theme_print_property_index ( property_name_length, index + 4, p );
}
printf ( "%*s}\n", index, "" );
g_list_free ( list );
@ -1009,13 +1010,13 @@ static int distance_unit_get_pixel ( RofiDistanceUnit *unit, RofiOrientation ori
{
int a = distance_unit_get_pixel ( unit->left, ori );
int b = distance_unit_get_pixel ( unit->right, ori );
return MIN(a,b);
return MIN ( a, b );
}
case ROFI_DISTANCE_MODIFIER_MAX:
{
int a = distance_unit_get_pixel ( unit->left, ori );
int b = distance_unit_get_pixel ( unit->right, ori );
return MAX(a,b);
return MAX ( a, b );
}
default:
break;
@ -1228,7 +1229,6 @@ static void rofi_theme_parse_merge_widgets_no_media ( ThemeWidget *parent, Theme
return;
}
ThemeWidget *w = rofi_theme_find_or_create_name ( parent, child->name );
rofi_theme_widget_add_properties ( w, child->properties );
for ( unsigned int i = 0; i < child->num_widgets; i++ ) {
@ -1245,11 +1245,10 @@ void rofi_theme_parse_merge_widgets ( ThemeWidget *parent, ThemeWidget *child )
return;
}
ThemeWidget *w = rofi_theme_find_or_create_name ( parent, child->name );
if ( child->media ) {
w->media = g_slice_new0(ThemeMedia);
*(w->media) = *(child->media);
w->media = g_slice_new0 ( ThemeMedia );
*( w->media ) = *( child->media );
}
rofi_theme_widget_add_properties ( w, child->properties );
for ( unsigned int i = 0; i < child->num_widgets; i++ ) {
@ -1347,9 +1346,9 @@ static void rofi_theme_parse_process_conditionals_int ( workarea mon, ThemeWidg
}
void rofi_theme_parse_process_conditionals ( void )
{
workarea mon;
monitor_active ( &mon );
rofi_theme_parse_process_conditionals_int ( mon, rofi_theme );
workarea mon;
monitor_active ( &mon );
rofi_theme_parse_process_conditionals_int ( mon, rofi_theme );
}
ThemeMediaType rofi_theme_parse_media_type ( const char *type )

View file

@ -151,12 +151,12 @@ RofiViewState * rofi_view_get_active ( void )
void rofi_view_remove_active ( RofiViewState *state )
{
if ( state == current_active_menu ) {
rofi_view_set_active ( NULL );
}
else if ( state ) {
g_queue_remove ( &(CacheState.views ), state);
}
if ( state == current_active_menu ) {
rofi_view_set_active ( NULL );
}
else if ( state ) {
g_queue_remove ( &( CacheState.views ), state );
}
}
void rofi_view_set_active ( RofiViewState *state )
{

View file

@ -224,7 +224,7 @@ wayland_surface_protocol_enter ( void *data, struct wl_surface *wl_surface, stru
RofiViewState *state = rofi_view_get_active ( );
if ( state != NULL ) {
rofi_view_set_size( state, -1, -1 );
rofi_view_set_size ( state, -1, -1 );
}
}
}
@ -360,7 +360,7 @@ wayland_key_repeat ( void *data )
return G_SOURCE_REMOVE;
}
char *text = nk_bindings_seat_handle_key( wayland->bindings_seat, NULL, self->repeat.key, NK_BINDINGS_KEY_STATE_PRESS );
char *text = nk_bindings_seat_handle_key ( wayland->bindings_seat, NULL, self->repeat.key, NK_BINDINGS_KEY_STATE_PRESS );
RofiViewState *state = rofi_view_get_active ( );
if ( state == NULL ) {
@ -385,7 +385,7 @@ wayland_key_repeat_delay ( void *data )
return FALSE;
}
char *text = nk_bindings_seat_handle_key( wayland->bindings_seat, NULL, self->repeat.key, NK_BINDINGS_KEY_STATE_PRESS );
char *text = nk_bindings_seat_handle_key ( wayland->bindings_seat, NULL, self->repeat.key, NK_BINDINGS_KEY_STATE_PRESS );
RofiViewState *state = rofi_view_get_active ( );
if ( state == NULL ) {
@ -527,9 +527,8 @@ wayland_pointer_send_events ( wayland_seat *self )
return;
}
if ( self->motion.x > -1 || self->motion.y > -1 )
{
rofi_view_handle_mouse_motion (state, self->motion.x, self->motion.y);
if ( self->motion.x > -1 || self->motion.y > -1 ) {
rofi_view_handle_mouse_motion ( state, self->motion.x, self->motion.y );
self->motion.x = -1;
self->motion.y = -1;
}

View file

@ -244,7 +244,7 @@ static void wayland___create_window ( MenuFlags menu_flags )
WlState.flags = menu_flags;
// Setup font.
// Dummy widget.
box *win = box_create ( NULL, "window", ROFI_ORIENTATION_HORIZONTAL );
box *win = box_create ( NULL, "window", ROFI_ORIENTATION_HORIZONTAL );
const char *font = rofi_theme_get_string ( WIDGET ( win ), "font", config.menu_font );
if ( font ) {
PangoFontDescription *pfd = pango_font_description_from_string ( font );
@ -287,7 +287,8 @@ static void wayland_rofi_view_calculate_window_width ( RofiViewState *state )
double fw = textbox_get_estimated_char_width ( );
state->width = -( fw * config.menu_width );
state->width += widget_padding_get_padding_width ( WIDGET ( state->main_window ) );
} else {
}
else {
int width = 1920;
// Calculate as float to stop silly, big rounding down errors.
display_get_surface_dimensions ( &width, NULL );
@ -308,7 +309,7 @@ static void wayland_rofi_view_update ( RofiViewState *state, gboolean qr )
if ( state->pool == NULL ) {
state->pool = display_buffer_pool_new ( state->width, state->height );
}
cairo_surface_t *surface = display_buffer_pool_get_next_buffer (state->pool);
cairo_surface_t *surface = display_buffer_pool_get_next_buffer ( state->pool );
if ( surface == NULL ) {
// no available buffer, bail out
return;

View file

@ -135,12 +135,12 @@ static void textbox_initialize_font ( textbox *tb )
if ( helper_validate_font ( tbfc->pfd, font ) ) {
tbfc->metrics = pango_context_get_metrics ( p_context, tbfc->pfd, NULL );
PangoLayout *layout = pango_layout_new(p_context );
pango_layout_set_text(layout,"aAjb", -1);
PangoLayout *layout = pango_layout_new ( p_context );
pango_layout_set_text ( layout, "aAjb", -1 );
PangoRectangle rect;
pango_layout_get_pixel_extents(layout, NULL, &rect );
tbfc->height = rect.y + rect.height;
g_object_unref ( layout);
pango_layout_get_pixel_extents ( layout, NULL, &rect );
tbfc->height = rect.y + rect.height;
g_object_unref ( layout );
// Cast away consts. (*yuck*) because table_insert does not know it is const.
g_hash_table_insert ( tbfc_cache, (char *) font, tbfc );
@ -274,7 +274,7 @@ static void __textbox_update_pango_text ( textbox *tb )
tb->show_placeholder = FALSE;
if ( ( tb->flags & TB_PASSWORD ) == TB_PASSWORD ) {
size_t l = g_utf8_strlen ( tb->text, -1 );
char string [l + 1];
char string[l + 1];
memset ( string, '*', l );
string[l] = '\0';
pango_layout_set_text ( tb->layout, string, l );
@ -827,12 +827,12 @@ void textbox_set_pango_context ( const char *font, PangoContext *p )
TBFontConfig *tbfc = g_malloc0 ( sizeof ( TBFontConfig ) );
tbfc->metrics = p_metrics;
PangoLayout *layout = pango_layout_new( p_context );
pango_layout_set_text(layout,"aAjb", -1);
PangoLayout *layout = pango_layout_new ( p_context );
pango_layout_set_text ( layout, "aAjb", -1 );
PangoRectangle rect;
pango_layout_get_pixel_extents(layout, NULL, &rect );
tbfc->height = rect.y + rect.height;
g_object_unref ( layout);
pango_layout_get_pixel_extents ( layout, NULL, &rect );
tbfc->height = rect.y + rect.height;
g_object_unref ( layout );
tbfc_default = tbfc;
g_hash_table_insert ( tbfc_cache, (gpointer *) ( font ? font : default_font_name ), tbfc );
@ -874,20 +874,20 @@ int textbox_get_font_height ( const textbox *tb )
{
PangoRectangle rect;
pango_layout_get_pixel_extents ( tb->layout, NULL, &rect );
return rect.height+ rect.y;
return rect.height + rect.y;
}
int textbox_get_font_width ( const textbox *tb )
{
PangoRectangle rect;
pango_layout_get_pixel_extents ( tb->layout, NULL, &rect);
pango_layout_get_pixel_extents ( tb->layout, NULL, &rect );
return rect.width + rect.x;
}
/** Caching for the estimated character height. (em) */
double textbox_get_estimated_char_height ( void )
{
return tbfc_default->height;
return tbfc_default->height;
}
/** Caching for the expected character width. */

View file

@ -231,8 +231,8 @@ static XrmOption xrmOptions[] = {
"DRUN: build and use a cache with desktop file content.", CONFIG_DEFAULT },
{ xrm_Boolean, "drun-reload-desktop-cache", { .snum = &config.drun_reload_desktop_cache }, NULL,
"DRUN: If enabled, reload the cache with desktop file content.", CONFIG_DEFAULT },
{ xrm_Boolean, "normalize-match", { .snum = &config.normalize_match }, NULL,
"Normalize string when matching (implies -no-show-match).", CONFIG_DEFAULT },
{ xrm_Boolean, "normalize-match", { .snum = &config.normalize_match }, NULL,
"Normalize string when matching (implies -no-show-match).", CONFIG_DEFAULT },
};
/** Dynamic array of extra options */