diff --git a/include/widgets/box.h b/include/widgets/box.h index e5507731..d764821f 100644 --- a/include/widgets/box.h +++ b/include/widgets/box.h @@ -45,7 +45,7 @@ box * box_create ( boxType type, short x, short y, short w, short h ); * @param end If the child widget should be packed at the end. * * Add a widget to the box. - */ + */ void box_add ( box *box, widget *child, gboolean expand, gboolean end ); /** @@ -53,7 +53,7 @@ void box_add ( box *box, widget *child, gboolean expand, gboolean end ); * * Obtains the minimal size required to display all widgets. (expanding widgets are not counted, except for their * padding) - * + * * @returns the minimum size in pixels. */ int box_get_fixed_pixels ( box *box ); diff --git a/include/widgets/separator.h b/include/widgets/separator.h index c2406a2f..5294f8da 100644 --- a/include/widgets/separator.h +++ b/include/widgets/separator.h @@ -14,13 +14,24 @@ typedef struct _separator separator; /** - * @param h The height of the separator. + * Direction of the separator. + */ + +typedef enum +{ + S_HORIZONTAL = 0, + S_VERTICAL = 1 +} separator_type; + +/** + * @param type The type of separator. + * @param sw The thickness of the separator. * * Create a horizontal separator with height h. * * @returns a new separator, free with ::widget_free */ -separator *separator_create ( short h ); +separator *separator_create ( separator_type type, short sw ); /*@}*/ #endif // ROFI_SEPARATOR_H diff --git a/include/widgets/textbox.h b/include/widgets/textbox.h index 759220bf..e0ae62b1 100644 --- a/include/widgets/textbox.h +++ b/include/widgets/textbox.h @@ -38,16 +38,16 @@ typedef struct typedef enum { - TB_AUTOHEIGHT = 1 << 0, - TB_AUTOWIDTH = 1 << 1, - TB_LEFT = 1 << 16, - TB_RIGHT = 1 << 17, - TB_CENTER = 1 << 18, - TB_EDITABLE = 1 << 19, - TB_MARKUP = 1 << 20, - TB_WRAP = 1 << 21, - TB_PASSWORD = 1 << 22, - TB_INDICATOR = 1 << 23, + TB_AUTOHEIGHT = 1 << 0, + TB_AUTOWIDTH = 1 << 1, + TB_LEFT = 1 << 16, + TB_RIGHT = 1 << 17, + TB_CENTER = 1 << 18, + TB_EDITABLE = 1 << 19, + TB_MARKUP = 1 << 20, + TB_WRAP = 1 << 21, + TB_PASSWORD = 1 << 22, + TB_INDICATOR = 1 << 23, } TextboxFlags; typedef enum diff --git a/source/rofi.c b/source/rofi.c index b35128c0..391d8f21 100644 --- a/source/rofi.c +++ b/source/rofi.c @@ -73,9 +73,9 @@ struct xkb_stuff xkb = { .keymap = NULL, .state = NULL, .compose = { - .table = NULL, - .state = NULL -} + .table = NULL, + .state = NULL + } }; char *config_path = NULL; // Array of modi. @@ -456,22 +456,22 @@ static gboolean main_loop_x11_event_handler ( xcb_generic_event_t *ev, G_GNUC_UN xkb.state = xkb_x11_state_new_from_device ( xkb.keymap, xcb->connection, xkb.device_id ); break; case XCB_XKB_STATE_NOTIFY: - { - xcb_xkb_state_notify_event_t *ksne = (xcb_xkb_state_notify_event_t *) ev; - guint modmask; - xkb_state_update_mask ( xkb.state, - ksne->baseMods, - ksne->latchedMods, - ksne->lockedMods, - ksne->baseGroup, - ksne->latchedGroup, - ksne->lockedGroup ); - modmask = x11_get_current_mask ( &xkb ); - if ( modmask == 0 ) { - abe_trigger_release ( ); - } - break; + { + xcb_xkb_state_notify_event_t *ksne = (xcb_xkb_state_notify_event_t *) ev; + guint modmask; + xkb_state_update_mask ( xkb.state, + ksne->baseMods, + ksne->latchedMods, + ksne->lockedMods, + ksne->baseGroup, + ksne->latchedGroup, + ksne->lockedGroup ); + modmask = x11_get_current_mask ( &xkb ); + if ( modmask == 0 ) { + abe_trigger_release ( ); } + break; + } } return G_SOURCE_CONTINUE; } diff --git a/source/view.c b/source/view.c index 0e1f0c4a..7b91ab0d 100644 --- a/source/view.c +++ b/source/view.c @@ -1388,7 +1388,7 @@ RofiViewState *rofi_view_create ( Mode *sw, state->input_bar = box_create ( BOX_HORIZONTAL, 0, 0, state->width - state->border, line_height ); box_set_padding ( state->input_bar, config.line_margin ); - state->input_bar_separator = separator_create ( 2 ); + state->input_bar_separator = separator_create ( S_HORIZONTAL, 2 ); if ( ( config.location == WL_EAST_SOUTH || config.location == WL_SOUTH || config.location == WL_SOUTH_WEST ) ) { box_add ( state->main_box, WIDGET ( state->input_bar_separator ), FALSE, TRUE ); @@ -1400,6 +1400,8 @@ RofiViewState *rofi_view_create ( Mode *sw, } state->case_indicator = textbox_create ( TB_AUTOWIDTH, 0, 0, 0, line_height, NORMAL, "*" ); + // Add small separator between case indicator and text box. + /* box_add ( state->input_bar, WIDGET( separator_create ( S_VERTICAL, 2 ) ), FALSE, TRUE );*/ box_add ( state->input_bar, WIDGET ( state->case_indicator ), FALSE, TRUE ); // Prompt box. @@ -1419,7 +1421,7 @@ RofiViewState *rofi_view_create ( Mode *sw, textbox *message_tb = textbox_create ( TB_AUTOHEIGHT | TB_MARKUP | TB_WRAP, 0, 0, state->width - ( 2 * ( state->border ) ), -1, NORMAL, message ); box_add ( state->main_box, WIDGET ( message_tb ), FALSE, FALSE ); - box_add ( state->main_box, WIDGET ( separator_create ( 2 ) ), FALSE, FALSE ); + box_add ( state->main_box, WIDGET ( separator_create ( S_HORIZONTAL, 2 ) ), FALSE, FALSE ); } state->overlay = textbox_create ( TB_AUTOWIDTH, 0, 0, 20, line_height, URGENT, "blaat" ); @@ -1444,7 +1446,7 @@ RofiViewState *rofi_view_create ( Mode *sw, if ( config.sidebar_mode ) { state->sidebar_bar = box_create ( BOX_HORIZONTAL, 0, 0, state->width - 2 * state->border, line_height ); box_set_padding ( state->sidebar_bar, config.line_margin ); - box_add ( state->main_box, WIDGET ( separator_create ( 2 ) ), FALSE, TRUE ); + box_add ( state->main_box, WIDGET ( separator_create ( S_HORIZONTAL, 2 ) ), FALSE, TRUE ); box_add ( state->main_box, WIDGET ( state->sidebar_bar ), FALSE, TRUE ); state->num_modi = rofi_get_num_enabled_modi (); state->modi = g_malloc0 ( state->num_modi * sizeof ( textbox * ) ); diff --git a/source/widgets/separator.c b/source/widgets/separator.c index 4cc48273..8ce539ab 100644 --- a/source/widgets/separator.c +++ b/source/widgets/separator.c @@ -35,7 +35,8 @@ */ struct _separator { - widget widget; + widget widget; + separator_type type; }; const char *const _separator_style_none = "none"; @@ -43,14 +44,21 @@ const char *const _separator_style_dash = "dash"; static void separator_draw ( widget *, cairo_t * ); static void separator_free ( widget * ); -separator *separator_create ( short h ) +separator *separator_create ( separator_type type, short sw ) { separator *sb = g_malloc0 ( sizeof ( separator ) ); + sb->type = type; sb->widget.x = 0; sb->widget.y = 0; - sb->widget.w = 1; - sb->widget.h = MAX ( 1, h ); + if ( sb->type == S_HORIZONTAL ) { + sb->widget.w = 1; + sb->widget.h = MAX ( 1, sw ); + } + else { + sb->widget.h = 1; + sb->widget.w = MAX ( 1, sw ); + } sb->widget.draw = separator_draw; sb->widget.free = separator_free; @@ -68,16 +76,25 @@ static void separator_free ( widget *wid ) static void separator_draw ( widget *wid, cairo_t *draw ) { + separator *sep = (separator *) wid; if ( strcmp ( config.separator_style, _separator_style_none ) ) { - cairo_set_line_width ( draw, wid->h ); color_separator ( draw ); if ( strcmp ( config.separator_style, _separator_style_dash ) == 0 ) { const double dashes[1] = { 4 }; cairo_set_dash ( draw, dashes, 1, 0.0 ); } - double half = wid->h / 2.0; - cairo_move_to ( draw, wid->x, wid->y + half ); - cairo_line_to ( draw, wid->x + wid->w, wid->y + half ); + if ( sep->type == S_HORIZONTAL ) { + cairo_set_line_width ( draw, wid->h ); + double half = wid->h / 2.0; + cairo_move_to ( draw, wid->x, wid->y + half ); + cairo_line_to ( draw, wid->x + wid->w, wid->y + half ); + } + else { + cairo_set_line_width ( draw, wid->w ); + double half = wid->w / 2.0; + cairo_move_to ( draw, wid->x + half, wid->y ); + cairo_line_to ( draw, wid->x + half, wid->y + wid->h ); + } cairo_stroke ( draw ); } }