diff options
author | Dave Davenport <qball@gmpclient.org> | 2017-01-21 12:58:52 +0100 |
---|---|---|
committer | Dave Davenport <qball@gmpclient.org> | 2017-01-21 12:58:52 +0100 |
commit | 0ebd6a260b652e6d3820c7571683d87eea723dec (patch) | |
tree | f2ad8a29c49cca1e79edf4e3bfd19cf1fe503b33 /source | |
parent | b0870e02f7bde476a47e50d252c9d4c9dadf12a8 (diff) |
Add auto-detect option to DPI setting.
Diffstat (limited to 'source')
-rw-r--r-- | source/dialogs/drun.c | 4 | ||||
-rw-r--r-- | source/dialogs/ssh.c | 2 | ||||
-rw-r--r-- | source/helper.c | 9 | ||||
-rw-r--r-- | source/rofi.c | 2 | ||||
-rw-r--r-- | source/theme.c | 4 | ||||
-rw-r--r-- | source/view.c | 42 | ||||
-rw-r--r-- | source/x11-helper.c | 21 | ||||
-rw-r--r-- | source/xrmoptions.c | 2 |
8 files changed, 55 insertions, 31 deletions
diff --git a/source/dialogs/drun.c b/source/dialogs/drun.c index 1df1b88f..e881907f 100644 --- a/source/dialogs/drun.c +++ b/source/dialogs/drun.c @@ -194,9 +194,9 @@ static void exec_cmd_entry ( DRunModeEntry *e ) } gchar *fp = rofi_expand_path ( g_strstrip ( str ) ); gchar *exec_path = g_key_file_get_string ( e->key_file, "Desktop Entry", "Path", NULL ); - if ( exec_path != NULL && strlen(exec_path) == 0){ + if ( exec_path != NULL && strlen ( exec_path ) == 0 ) { // If it is empty, ignore this property. (#529) - g_free(exec_path); + g_free ( exec_path ); exec_path = NULL; } diff --git a/source/dialogs/ssh.c b/source/dialogs/ssh.c index c0ba2f8c..8cfe68fd 100644 --- a/source/dialogs/ssh.c +++ b/source/dialogs/ssh.c @@ -198,7 +198,7 @@ static char **read_hosts_file ( char ** retv, unsigned int *length ) // Reading one line per time. while ( getline ( &buffer, &buffer_length, fd ) > 0 ) { // Evaluate one line. - unsigned int index = 0, ti = 0; + unsigned int index = 0, ti = 0; char *token = buffer; // Tokenize it. diff --git a/source/helper.c b/source/helper.c index 696cf41e..ef4a8a49 100644 --- a/source/helper.c +++ b/source/helper.c @@ -249,7 +249,7 @@ GRegex **tokenize ( const char *input, int case_sensitive ) } char *saveptr = NULL, *token; - GRegex **retv = NULL; + GRegex **retv = NULL; if ( !config.tokenize ) { retv = g_malloc0 ( sizeof ( GRegex* ) * 2 ); retv[0] = (GRegex *) create_regex ( input, case_sensitive ); @@ -656,7 +656,7 @@ char *rofi_expand_path ( const char *input ) /** Return the minimum value of a,b,c */ #define MIN3( a, b, c ) ( ( a ) < ( b ) ? ( ( a ) < ( c ) ? ( a ) : ( c ) ) : ( ( b ) < ( c ) ? ( b ) : ( c ) ) ) -unsigned int levenshtein ( const char *needle, const glong needlelen, const char *haystack, const glong haystacklen ) +unsigned int levenshtein ( const char *needle, const glong needlelen, const char *haystack, const glong haystacklen ) { unsigned int column[needlelen + 1]; for ( glong y = 0; y <= needlelen; y++ ) { @@ -846,8 +846,8 @@ int rofi_scorer_fuzzy_evaluate ( const char *pattern, glong plen, const char *st // uleft: value of the upper left cell; ulefts: maximum value of uleft and cells on the left. The arbitrary initial // values suppress warnings. int uleft = 0, ulefts = 0, left, lefts; - const gchar *pit = pattern, *sit; - enum CharClass prev = NON_WORD, cur; + const gchar *pit = pattern, *sit; + enum CharClass prev = NON_WORD, cur; for ( si = 0, sit = str; si < slen; si++, sit = g_utf8_next_char ( sit ) ) { cur = rofi_scorer_get_character_class ( g_utf8_get_char ( sit ) ); score[si] = rofi_scorer_get_score_for ( prev, cur ); @@ -889,4 +889,3 @@ int rofi_scorer_fuzzy_evaluate ( const char *pattern, glong plen, const char *st g_free ( dp ); return -lefts; } - diff --git a/source/rofi.c b/source/rofi.c index 63b3edc8..ea155f2b 100644 --- a/source/rofi.c +++ b/source/rofi.c @@ -416,7 +416,7 @@ static int add_mode ( const char * token ) } else #endif // WINDOW_MODE - // SSh dialog + // SSh dialog if ( strcasecmp ( token, "ssh" ) == 0 ) { modi[num_modi] = &ssh_mode; num_modi++; diff --git a/source/theme.c b/source/theme.c index 27c9f508..47e7c4a0 100644 --- a/source/theme.c +++ b/source/theme.c @@ -861,9 +861,9 @@ gboolean rofi_theme_parse_file ( const char *file ) yyin = fopen ( filename, "rb" ); if ( yyin == NULL ) { char *str = g_markup_printf_escaped ( "Failed to open theme: <i>%s</i>\nError: <b>%s</b>", - filename, strerror ( errno ) ); + filename, strerror ( errno ) ); rofi_add_error_message ( g_string_new ( str ) ); - g_free(str); + g_free ( str ); g_free ( filename ); return TRUE; } diff --git a/source/view.c b/source/view.c index 9db61826..024c41e3 100644 --- a/source/view.c +++ b/source/view.c @@ -61,8 +61,7 @@ #include "theme.h" /** The Rofi View log domain */ -#define LOG_DOMAIN "View" - +#define LOG_DOMAIN "View" #include "xcb.h" /** @@ -343,10 +342,10 @@ static void rofi_view_calculate_window_position ( RofiViewState *state ) break; } // Apply offset. - Distance x = rofi_theme_get_distance ( WIDGET ( state->main_window), "x-offset", config.x_offset ); - Distance y = rofi_theme_get_distance ( WIDGET ( state->main_window), "y-offset", config.y_offset ); - state->x += distance_get_pixel(x, ORIENTATION_HORIZONTAL); - state->y += distance_get_pixel(y, ORIENTATION_VERTICAL); + Distance x = rofi_theme_get_distance ( WIDGET ( state->main_window ), "x-offset", config.x_offset ); + Distance y = rofi_theme_get_distance ( WIDGET ( state->main_window ), "y-offset", config.y_offset ); + state->x += distance_get_pixel ( x, ORIENTATION_HORIZONTAL ); + state->y += distance_get_pixel ( y, ORIENTATION_VERTICAL ); } static void rofi_view_window_update_size ( RofiViewState * state ) @@ -558,11 +557,12 @@ static void filter_elements ( thread_state *t, G_GNUC_UNUSED gpointer user_data t->state->line_map[t->start + t->count] = i; if ( config.sort ) { // This is inefficient, need to fix it. - char * str = mode_get_completion ( t->state->sw, i ); - glong slen = g_utf8_strlen ( str, -1 ); + char * str = mode_get_completion ( t->state->sw, i ); + glong slen = g_utf8_strlen ( str, -1 ); if ( config.levenshtein_sort || config.matching_method != MM_FUZZY ) { t->state->distance[i] = levenshtein ( pattern, plen, str, slen ); - } else { + } + else { t->state->distance[i] = rofi_scorer_fuzzy_evaluate ( pattern, plen, str, slen ); } g_free ( str ); @@ -666,11 +666,27 @@ void __create_window ( MenuFlags menu_flags ) PangoContext *p = pango_cairo_create_context ( CacheState.edit_draw ); // Set the font options from the xlib surface pango_cairo_context_set_font_options ( p, fo ); + + CacheState.main_window = box; + CacheState.flags = menu_flags; + monitor_active ( &( CacheState.mon ) ); // Setup dpi if ( config.dpi > 0 ) { PangoFontMap *font_map = pango_cairo_font_map_get_default (); pango_cairo_font_map_set_resolution ( (PangoCairoFontMap *) font_map, (double) config.dpi ); } + else if ( config.dpi == 0 ) { + // Auto-detect mode. + double dpi = 96; + if ( CacheState.mon.mh > 0 ) { + dpi = ( CacheState.mon.h * 25.4 ) / (double) ( CacheState.mon.mh ); + } + else { + dpi = ( xcb->screen->height_in_pixels * 25.4 ) / (double) ( xcb->screen->height_in_millimeters ); + } + PangoFontMap *font_map = pango_cairo_font_map_get_default (); + pango_cairo_font_map_set_resolution ( (PangoCairoFontMap *) font_map, dpi ); + } // Setup font. // Dummy widget. container *win = container_create ( "window.box" ); @@ -710,10 +726,6 @@ void __create_window ( MenuFlags menu_flags ) xcb_change_property ( xcb->connection, XCB_PROP_MODE_REPLACE, box, xcb->ewmh._NET_WM_NAME, xcb->ewmh.UTF8_STRING, 8, 4, "rofi" ); xcb_change_property ( xcb->connection, XCB_PROP_MODE_REPLACE, box, XCB_ATOM_WM_NAME, XCB_ATOM_STRING, 8, 4, "rofi" ); - CacheState.main_window = box; - CacheState.flags = menu_flags; - monitor_active ( &( CacheState.mon ) ); - char *transparency = rofi_theme_get_string ( WIDGET ( win ), "transparency", NULL ); if ( transparency == NULL && config.fake_transparency ) { transparency = config.fake_background; @@ -1102,8 +1114,8 @@ gboolean rofi_view_trigger_action ( RofiViewState *state, KeyBindingAction actio menu_capture_screenshot ( ); break; case TOGGLE_SORT: - config.sort = !config.sort; - state->refilter = TRUE; + config.sort = !config.sort; + state->refilter = TRUE; textbox_text ( state->case_indicator, get_matching_state () ); break; case MODE_PREVIOUS: diff --git a/source/x11-helper.c b/source/x11-helper.c index 2411d3ec..93ec2842 100644 --- a/source/x11-helper.c +++ b/source/x11-helper.c @@ -210,6 +210,9 @@ static workarea * x11_get_monitor_from_output ( xcb_randr_output_t out ) retv->w = crtc_reply->width; retv->h = crtc_reply->height; + retv->mw = op_reply->mm_width; + retv->mh = op_reply->mm_height; + char *tname = (char *) xcb_randr_get_output_info_name ( op_reply ); int tname_len = xcb_randr_get_output_info_name_length ( op_reply ); @@ -337,6 +340,16 @@ void x11_dump_monitor_layout ( void ) printf ( "%s name%s: %s\n", ( is_term ) ? color_bold : "", is_term ? color_reset : "", iter->name ); printf ( "%s position%s: %d,%d\n", ( is_term ) ? color_bold : "", is_term ? color_reset : "", iter->x, iter->y ); printf ( "%s size%s: %d,%d\n", ( is_term ) ? color_bold : "", is_term ? color_reset : "", iter->w, iter->h ); + if ( iter->mw > 0 && iter->mh > 0 ) { + printf ( "%s size%s: %dmm,%dmm dpi: %.0f,%.0f\n", + ( is_term ) ? color_bold : "", + is_term ? color_reset : "", + iter->mw, + iter->mh, + iter->w * 25.4 / (double) iter->mw, + iter->h * 25.4 / (double) iter->mh + ); + } printf ( "\n" ); } } @@ -679,9 +692,9 @@ gboolean x11_parse_key ( const char *combo, unsigned int *mod, xkb_keysym_t *key } } else if ( g_utf8_collate ( entry_lowered, "super" ) == 0 || - g_utf8_collate ( entry_lowered, "super_l" ) == 0 || - g_utf8_collate ( entry_lowered, "super_r" ) == 0 - ) { + g_utf8_collate ( entry_lowered, "super_l" ) == 0 || + g_utf8_collate ( entry_lowered, "super_r" ) == 0 + ) { modmask |= x11_mod_masks[X11MOD_SUPER]; if ( x11_mod_masks[X11MOD_SUPER] == 0 ) { error_msg = g_strdup ( "X11 configured keyboard has no <b>Super</b> key.\n" ); @@ -701,7 +714,7 @@ gboolean x11_parse_key ( const char *combo, unsigned int *mod, xkb_keysym_t *key } else { if ( sym != XKB_KEY_NoSymbol ) { - error_msg = g_markup_printf_escaped ( "Only one (non modifier) key can be bound per binding: <b>%s</b> is invalid.\n", entry); + error_msg = g_markup_printf_escaped ( "Only one (non modifier) key can be bound per binding: <b>%s</b> is invalid.\n", entry ); } sym = xkb_keysym_from_name ( entry, XKB_KEYSYM_NO_FLAGS ); if ( sym == XKB_KEY_NoSymbol ) { diff --git a/source/xrmoptions.c b/source/xrmoptions.c index 85f829c7..79e379a1 100644 --- a/source/xrmoptions.c +++ b/source/xrmoptions.c @@ -138,7 +138,7 @@ static XrmOption xrmOptions[] = { { xrm_Boolean, "disable-history", { .num = &config.disable_history }, NULL, "Disable history in run/ssh", CONFIG_DEFAULT }, { xrm_Boolean, "sort", { .num = &config.sort }, NULL, - "Use sorting", CONFIG_DEFAULT }, + "Use sorting", CONFIG_DEFAULT }, { xrm_Boolean, "levenshtein-sort", { .num = &config.levenshtein_sort }, NULL, "Use levenshtein sorting also for fuzzy matching", CONFIG_DEFAULT }, { xrm_Boolean, "case-sensitive", { .num = &config.case_sensitive }, NULL, |