summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/rofi.h16
-rw-r--r--include/view-internal.h2
-rw-r--r--source/rofi.c10
-rw-r--r--source/view.c22
4 files changed, 37 insertions, 13 deletions
diff --git a/include/rofi.h b/include/rofi.h
index 75713df7..d4c8646e 100644
--- a/include/rofi.h
+++ b/include/rofi.h
@@ -20,6 +20,22 @@
extern const char *cache_dir;
/**
+ * Get the number of enabled modi.
+ *
+ * @returns the number of enabled modi.
+ */
+unsigned int rofi_get_num_enabled_modi ( void );
+
+/**
+ * @param index The mode to return. (should be smaller then rofi_get_num_enabled_mode)
+ *
+ * Get an enabled mode handle.
+ *
+ * @returns a Mode handle.
+ */
+const Mode * rofi_get_mode ( unsigned int index );
+
+/**
* @param key the Key to match
* @param modstate the modifier state to match
*
diff --git a/include/view-internal.h b/include/view-internal.h
index e6c23d55..eb7389b4 100644
--- a/include/view-internal.h
+++ b/include/view-internal.h
@@ -63,7 +63,7 @@ typedef struct RofiViewState
workarea mon;
// Sidebar view
- ssize_t num_modi;
+ unsigned int num_modi;
textbox **modi;
MenuFlags menu_flags;
diff --git a/source/rofi.c b/source/rofi.c
index 90dc6041..6d5c8664 100644
--- a/source/rofi.c
+++ b/source/rofi.c
@@ -83,6 +83,16 @@ gboolean quiet = FALSE;
static void process_result ( RofiViewState *state );
gboolean main_loop_x11_event_handler ( G_GNUC_UNUSED gpointer data );
+unsigned int rofi_get_num_enabled_modi ( void )
+{
+ return num_modi;
+}
+
+const Mode * rofi_get_mode ( unsigned int index )
+{
+ return modi[index];
+}
+
/**
* @param name Name of the switcher to lookup.
*
diff --git a/source/view.c b/source/view.c
index 0d86a5eb..a4f9c90f 100644
--- a/source/view.c
+++ b/source/view.c
@@ -66,10 +66,6 @@
#include "view.h"
#include "view-internal.h"
-// TODO get rid of num_modi and modi, use an accessor.
-extern unsigned int num_modi;
-extern Mode **modi;
-
// What todo with these.
extern Display *display;
extern SnLauncheeContext *sncontext;
@@ -826,7 +822,7 @@ void rofi_view_update ( RofiViewState *state )
}
}
if ( config.sidebar_mode == TRUE ) {
- for ( unsigned int j = 0; j < num_modi; j++ ) {
+ for ( unsigned int j = 0; j < state->num_modi; j++ ) {
if ( state->modi[j] != NULL ) {
textbox_draw ( state->modi[j], d );
}
@@ -879,8 +875,8 @@ static void rofi_view_resize ( RofiViewState *state )
unsigned int sbw = config.line_margin + 8;
widget_move ( WIDGET ( state->scrollbar ), state->w - state->border - sbw, state->top_offset );
if ( config.sidebar_mode == TRUE ) {
- int width = ( state->w - ( 2 * ( state->border ) + ( num_modi - 1 ) * config.line_margin ) ) / num_modi;
- for ( unsigned int j = 0; j < num_modi; j++ ) {
+ int width = ( state->w - ( 2 * ( state->border ) + ( state->num_modi - 1 ) * config.line_margin ) ) / state->num_modi;
+ for ( unsigned int j = 0; j < state->num_modi; j++ ) {
textbox_moveresize ( state->modi[j],
state->border + j * ( width + config.line_margin ), state->h - state->line_height - state->border,
width, state->line_height );
@@ -1041,7 +1037,7 @@ static void rofi_view_mouse_navigation ( RofiViewState *state, XButtonEvent *xbe
state->update = TRUE;
return;
}
- for ( unsigned int i = 0; config.sidebar_mode == TRUE && i < num_modi; i++ ) {
+ for ( unsigned int i = 0; config.sidebar_mode == TRUE && i < state->num_modi; i++ ) {
if ( widget_intersect ( &( state->modi[i]->widget ), xbe->x, xbe->y ) ) {
( state->selected_line ) = 0;
state->retv = MENU_QUICK_SWITCH | ( i & MENU_LOWER_MASK );
@@ -1563,12 +1559,14 @@ RofiViewState *rofi_view_create ( Mode *sw,
calculate_window_position ( state );
if ( config.sidebar_mode == TRUE ) {
- int width = ( state->w - ( 2 * ( state->border ) + ( num_modi - 1 ) * config.line_margin ) ) / num_modi;
- state->modi = g_malloc0 ( num_modi * sizeof ( textbox * ) );
- for ( unsigned int j = 0; j < num_modi; j++ ) {
+ state->num_modi = rofi_get_num_enabled_modi ();
+ int width = ( state->w - ( 2 * ( state->border ) + ( state->num_modi - 1 ) * config.line_margin ) ) / state->num_modi;
+ state->modi = g_malloc0 ( state->num_modi * sizeof ( textbox * ) );
+ for ( unsigned int j = 0; j < state->num_modi; j++ ) {
+ const Mode * mode = rofi_get_mode ( j );
state->modi[j] = textbox_create ( TB_CENTER, state->border + j * ( width + config.line_margin ),
state->h - state->line_height - state->border, width, state->line_height,
- ( modi[j] == state->sw ) ? HIGHLIGHT : NORMAL, mode_get_name ( modi[j] ) );
+ ( mode == state->sw ) ? HIGHLIGHT : NORMAL, mode_get_name ( mode ) );
}
}