mirror of
https://github.com/lbonn/rofi
synced 2024-11-23 04:13:03 +00:00
Add fallback icon option.
This commit is contained in:
parent
6178970499
commit
cb250fa73a
5 changed files with 59 additions and 6 deletions
|
@ -173,5 +173,7 @@ Settings config = {
|
|||
/** normalize match */
|
||||
.normalize_match = FALSE,
|
||||
/** steal focus */
|
||||
.steal_focus = FALSE
|
||||
.steal_focus = FALSE,
|
||||
/** fallback icon */
|
||||
.application_fallback_icon = NULL
|
||||
};
|
||||
|
|
|
@ -207,6 +207,8 @@ typedef struct
|
|||
gboolean normalize_match;
|
||||
/** Steal focus */
|
||||
gboolean steal_focus;
|
||||
/** fallback icon */
|
||||
char *application_fallback_icon;
|
||||
} Settings;
|
||||
/** Global Settings structure. */
|
||||
extern Settings config;
|
||||
|
|
|
@ -169,6 +169,10 @@ struct _DRunModePrivateData
|
|||
char *old_completer_input;
|
||||
uint32_t selected_line;
|
||||
char *old_input;
|
||||
|
||||
/** fallback icon */
|
||||
uint32_t fallback_icon_fetch_uid;
|
||||
cairo_surface_t *fallback_icon;
|
||||
};
|
||||
|
||||
struct RegexEvalArg
|
||||
|
@ -1242,6 +1246,17 @@ static char *_get_display_value ( const Mode *sw, unsigned int selected_line, in
|
|||
return retv;
|
||||
}
|
||||
|
||||
static cairo_surface_t *fallback_icon ( DRunModePrivateData *pd, int height )
|
||||
{
|
||||
if ( config.application_fallback_icon ) {
|
||||
// FALLBACK
|
||||
if ( pd->fallback_icon_fetch_uid > 0 ) {
|
||||
return rofi_icon_fetcher_get ( pd->fallback_icon_fetch_uid );
|
||||
}
|
||||
pd->fallback_icon_fetch_uid = rofi_icon_fetcher_query ( config.application_fallback_icon, height );
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
static cairo_surface_t *_get_icon ( const Mode *sw, unsigned int selected_line, int height )
|
||||
{
|
||||
DRunModePrivateData *pd = (DRunModePrivateData *) mode_get_private_data ( sw );
|
||||
|
@ -1254,10 +1269,18 @@ static cairo_surface_t *_get_icon ( const Mode *sw, unsigned int selected_line,
|
|||
return NULL;
|
||||
}
|
||||
if ( dr->icon_fetch_uid > 0 ) {
|
||||
return rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
cairo_surface_t *icon = rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
if ( icon ) {
|
||||
return icon;
|
||||
}
|
||||
return fallback_icon ( pd, height );
|
||||
}
|
||||
dr->icon_fetch_uid = rofi_icon_fetcher_query ( dr->icon_name, height );
|
||||
return rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
cairo_surface_t *icon = rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
if ( icon ) {
|
||||
return icon;
|
||||
}
|
||||
return fallback_icon ( pd, height );
|
||||
}
|
||||
|
||||
static char *drun_get_completion ( const Mode *sw, unsigned int index )
|
||||
|
|
|
@ -87,6 +87,9 @@ typedef struct
|
|||
|
||||
Mode *completer;
|
||||
char *old_completer_input;
|
||||
/** fallback icon */
|
||||
uint32_t fallback_icon_fetch_uid;
|
||||
cairo_surface_t *fallback_icon;
|
||||
} RunModePrivateData;
|
||||
|
||||
/**
|
||||
|
@ -520,6 +523,18 @@ static char *run_get_message ( const Mode *sw )
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
static cairo_surface_t *fallback_icon ( RunModePrivateData *pd, int height )
|
||||
{
|
||||
if ( config.application_fallback_icon ) {
|
||||
// FALLBACK
|
||||
if ( pd->fallback_icon_fetch_uid > 0 ) {
|
||||
return rofi_icon_fetcher_get ( pd->fallback_icon_fetch_uid );
|
||||
}
|
||||
pd->fallback_icon_fetch_uid = rofi_icon_fetcher_query ( config.application_fallback_icon, height );
|
||||
}
|
||||
return NULL;
|
||||
|
||||
}
|
||||
static cairo_surface_t *_get_icon ( const Mode *sw, unsigned int selected_line, int height )
|
||||
{
|
||||
RunModePrivateData *pd = (RunModePrivateData *) mode_get_private_data ( sw );
|
||||
|
@ -528,16 +543,25 @@ static cairo_surface_t *_get_icon ( const Mode *sw, unsigned int selected_line,
|
|||
}
|
||||
g_return_val_if_fail ( pd->cmd_list != NULL, NULL );
|
||||
RunEntry *dr = &( pd->cmd_list[selected_line] );
|
||||
|
||||
if ( dr->icon_fetch_uid > 0 ) {
|
||||
return rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
cairo_surface_t *icon = rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
if ( icon ) {
|
||||
return icon;
|
||||
}
|
||||
return fallback_icon ( pd, height );
|
||||
}
|
||||
/** lookup icon */
|
||||
char ** str = g_strsplit(dr->entry, " ", 2);
|
||||
if ( str ) {
|
||||
dr->icon_fetch_uid = rofi_icon_fetcher_query ( str[0], height );
|
||||
g_strfreev ( str );
|
||||
return rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
cairo_surface_t *icon = rofi_icon_fetcher_get ( dr->icon_fetch_uid );
|
||||
if ( icon ) {
|
||||
return icon;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
return fallback_icon ( pd, height );
|
||||
}
|
||||
|
||||
#include "mode-private.h"
|
||||
|
|
|
@ -233,6 +233,8 @@ static XrmOption xrmOptions[] = {
|
|||
"Normalize string when matching (disables match highlighting).", CONFIG_DEFAULT },
|
||||
{ xrm_Boolean, "steal-focus", { .snum = &config.steal_focus }, NULL,
|
||||
"Steal focus on launch and restore to window that had it on rofi start on close .", CONFIG_DEFAULT },
|
||||
{ xrm_String, "application-fallback-icon", { .snum = &(config.application_fallback_icon) }, NULL,
|
||||
"Fallback icon to use when the application icon is not found in run/drun.", CONFIG_DEFAULT },
|
||||
};
|
||||
|
||||
/** Dynamic array of extra options */
|
||||
|
|
Loading…
Reference in a new issue