summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/widgets/box.h4
-rw-r--r--include/widgets/separator.h15
-rw-r--r--include/widgets/textbox.h20
-rw-r--r--source/rofi.c36
-rw-r--r--source/view.c8
-rw-r--r--source/widgets/separator.c33
6 files changed, 73 insertions, 43 deletions
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 );
}
}