mirror of
https://github.com/davatorium/rofi.git
synced 2025-02-03 15:34:54 -05:00
Split out xresource and add -v --version
This commit is contained in:
parent
302db5bf07
commit
96e76c1998
4 changed files with 116 additions and 78 deletions
3
Makefile
3
Makefile
|
@ -1,6 +1,6 @@
|
||||||
QUIET?=@
|
QUIET?=@
|
||||||
CFLAGS?=-Wall -Wextra -O3 -g
|
CFLAGS?=-Wall -Wextra -O3 -g
|
||||||
VERSION?=0.14.1
|
VERSION?=0.14.2
|
||||||
|
|
||||||
PROGRAM=simpleswitcher
|
PROGRAM=simpleswitcher
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ DIST_TARGET=$(BUILD_DIR)/$(PROGRAM)-$(VERSION).tar.xz
|
||||||
CFLAGS+=-DMANPAGE_PATH="\"$(INSTALL_MANPAGE_PATH)\""
|
CFLAGS+=-DMANPAGE_PATH="\"$(INSTALL_MANPAGE_PATH)\""
|
||||||
CFLAGS+=-std=c99
|
CFLAGS+=-std=c99
|
||||||
CFLAGS+=-Iinclude/
|
CFLAGS+=-Iinclude/
|
||||||
|
CFLAGS+=-DVERSION="\"$(VERSION)\""
|
||||||
|
|
||||||
# Check deps.
|
# Check deps.
|
||||||
ifeq (${DEBUG},1)
|
ifeq (${DEBUG},1)
|
||||||
|
|
5
include/xrmoptions.h
Normal file
5
include/xrmoptions.h
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#ifndef __XRMOPTIONS_H__
|
||||||
|
#define __XRMOPTIONS_H__
|
||||||
|
void parse_xresource_options( Display *display );
|
||||||
|
|
||||||
|
#endif
|
|
@ -51,7 +51,6 @@
|
||||||
#include <X11/Xresource.h>
|
#include <X11/Xresource.h>
|
||||||
#include <X11/extensions/Xinerama.h>
|
#include <X11/extensions/Xinerama.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef I3
|
#ifdef I3
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <linux/un.h>
|
#include <linux/un.h>
|
||||||
|
@ -69,6 +68,8 @@
|
||||||
#include "profile-dialog.h"
|
#include "profile-dialog.h"
|
||||||
#include "dmenu-dialog.h"
|
#include "dmenu-dialog.h"
|
||||||
|
|
||||||
|
#include "xrmoptions.h"
|
||||||
|
|
||||||
#define LINE_MARGIN 4
|
#define LINE_MARGIN 4
|
||||||
|
|
||||||
#define OPAQUE 0xffffffff
|
#define OPAQUE 0xffffffff
|
||||||
|
@ -79,33 +80,6 @@ xdgHandle xdg_handle;
|
||||||
const char *cache_dir = NULL;
|
const char *cache_dir = NULL;
|
||||||
|
|
||||||
|
|
||||||
// Big thanks to Sean Pringle for this code.
|
|
||||||
// This maps xresource options to config structure.
|
|
||||||
#define xrm_String 0
|
|
||||||
#define xrm_Number 1
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int type;
|
|
||||||
char * name ;
|
|
||||||
union {
|
|
||||||
unsigned int * num;
|
|
||||||
char ** str;
|
|
||||||
};
|
|
||||||
} XrmOption;
|
|
||||||
XrmOption xrmOptions[] = {
|
|
||||||
{ xrm_Number, "opacity", { .num = &config.window_opacity } },
|
|
||||||
{ xrm_Number, "width", { .num = &config.menu_width } },
|
|
||||||
{ xrm_Number, "lines", { .num = &config.menu_lines } },
|
|
||||||
{ xrm_String, "font", { .str = &config.menu_font } },
|
|
||||||
{ xrm_String, "foreground", { .str = &config.menu_fg } },
|
|
||||||
{ xrm_String, "background", { .str = &config.menu_bg } },
|
|
||||||
{ xrm_String, "highlightfg", { .str = &config.menu_hlfg } },
|
|
||||||
{ xrm_String, "highlightbg", { .str = &config.menu_hlbg } },
|
|
||||||
{ xrm_String, "bordercolor", { .str = &config.menu_bc } },
|
|
||||||
{ xrm_Number, "padding", { .num = &config.padding } },
|
|
||||||
{ xrm_Number, "borderwidth", { .num = &config.menu_bw} },
|
|
||||||
{ xrm_String, "terminal", { .str = &config.terminal_emulator } },
|
|
||||||
};
|
|
||||||
|
|
||||||
void* allocate( unsigned long bytes )
|
void* allocate( unsigned long bytes )
|
||||||
{
|
{
|
||||||
|
@ -1393,6 +1367,22 @@ void grab_key( unsigned int modmask, KeySym key )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef I3
|
||||||
|
static inline void display_get_i3_path( Display *display )
|
||||||
|
{
|
||||||
|
config.i3_mode = 0;
|
||||||
|
Atom atom = XInternAtom( display, I3_SOCKET_PATH_PROP,True );
|
||||||
|
|
||||||
|
if ( atom != None ) {
|
||||||
|
i3_socket_path = window_get_text_prop( root, atom );
|
||||||
|
|
||||||
|
if ( i3_socket_path != NULL ) {
|
||||||
|
config.i3_mode = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif //I3
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Help function. This calls man.
|
* Help function. This calls man.
|
||||||
|
@ -1418,6 +1408,14 @@ int main( int argc, char *argv[] )
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( find_arg( argc, argv, "-v" ) >= 0 ||
|
||||||
|
find_arg( argc, argv, "-version" ) >= 0 ) {
|
||||||
|
|
||||||
|
fprintf( stdout, "Version: "VERSION"\n" );
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get DISPLAY
|
||||||
char *display_str= getenv( "DISPLAY" );
|
char *display_str= getenv( "DISPLAY" );
|
||||||
find_arg_str( argc, argv, "-display", &display_str );
|
find_arg_str( argc, argv, "-display", &display_str );
|
||||||
|
|
||||||
|
@ -1426,6 +1424,7 @@ int main( int argc, char *argv[] )
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Initialize xdg, so we can grab the xdgCacheHome
|
||||||
if ( xdgInitHandle( &xdg_handle ) == NULL ) {
|
if ( xdgInitHandle( &xdg_handle ) == NULL ) {
|
||||||
fprintf( stderr, "Failed to initialize XDG\n" );
|
fprintf( stderr, "Failed to initialize XDG\n" );
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
@ -1458,43 +1457,7 @@ int main( int argc, char *argv[] )
|
||||||
// X atom values
|
// X atom values
|
||||||
for ( i = 0; i < NETATOMS; i++ ) netatoms[i] = XInternAtom( display, netatom_names[i], False );
|
for ( i = 0; i < NETATOMS; i++ ) netatoms[i] = XInternAtom( display, netatom_names[i], False );
|
||||||
|
|
||||||
// Map Xresource entries to simpleswitcher config options.
|
parse_xresource_options( display );
|
||||||
XrmInitialize();
|
|
||||||
char * xRMS = XResourceManagerString ( display );
|
|
||||||
|
|
||||||
if ( xRMS != NULL ) {
|
|
||||||
XrmDatabase xDB = XrmGetStringDatabase ( xRMS );
|
|
||||||
|
|
||||||
char * xrmType;
|
|
||||||
XrmValue xrmValue;
|
|
||||||
// TODO: update when we have new name.
|
|
||||||
const char * namePrefix = "simpleswitcher";
|
|
||||||
const char * classPrefix = "Simpleswitcher";
|
|
||||||
|
|
||||||
for ( unsigned int i = 0; i < sizeof ( xrmOptions ) / sizeof ( *xrmOptions ); ++i ) {
|
|
||||||
char *name = ( char* ) allocate( ( strlen ( namePrefix ) + 1 + strlen ( xrmOptions[i].name ) ) *
|
|
||||||
sizeof ( char ) + 1 );
|
|
||||||
char *class = ( char* ) allocate( ( strlen ( classPrefix ) + 1 + strlen ( xrmOptions[i].name ) ) *
|
|
||||||
sizeof ( char ) + 1 );
|
|
||||||
sprintf ( name, "%s.%s", namePrefix, xrmOptions[i].name );
|
|
||||||
sprintf ( class, "%s.%s", classPrefix, xrmOptions[i].name );
|
|
||||||
|
|
||||||
if ( XrmGetResource ( xDB, name, class, &xrmType, &xrmValue ) ) {
|
|
||||||
|
|
||||||
if ( xrmOptions[i].type == xrm_String ) {
|
|
||||||
*xrmOptions[i].str = ( char * ) allocate ( xrmValue.size * sizeof ( char ) );
|
|
||||||
strncpy ( *xrmOptions[i].str, xrmValue.addr, xrmValue.size );
|
|
||||||
} else if ( xrmOptions[i].type == xrm_Number ) {
|
|
||||||
*xrmOptions[i].num = strtol ( xrmValue.addr, NULL, 10 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
free ( name );
|
|
||||||
free ( class );
|
|
||||||
}
|
|
||||||
|
|
||||||
XFree ( xRMS );
|
|
||||||
}
|
|
||||||
|
|
||||||
find_arg_str( argc, argv, "-font", &( config.menu_font ) );
|
find_arg_str( argc, argv, "-font", &( config.menu_font ) );
|
||||||
find_arg_str( argc, argv, "-fg", &( config.menu_fg ) );
|
find_arg_str( argc, argv, "-fg", &( config.menu_fg ) );
|
||||||
|
@ -1525,18 +1488,7 @@ int main( int argc, char *argv[] )
|
||||||
|
|
||||||
#ifdef I3
|
#ifdef I3
|
||||||
// Check for i3
|
// Check for i3
|
||||||
{
|
display_get_i3_path( display );
|
||||||
config.i3_mode = 0;
|
|
||||||
Atom atom = XInternAtom( display, I3_SOCKET_PATH_PROP,True );
|
|
||||||
|
|
||||||
if ( atom != None ) {
|
|
||||||
i3_socket_path = window_get_text_prop( root, atom );
|
|
||||||
|
|
||||||
if ( i3_socket_path != NULL ) {
|
|
||||||
config.i3_mode = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// flags to run immediately and exit
|
// flags to run immediately and exit
|
||||||
|
|
80
source/xrmoptions.c
Normal file
80
source/xrmoptions.c
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <X11/X.h>
|
||||||
|
#include <X11/Xresource.h>
|
||||||
|
#include "simpleswitcher.h"
|
||||||
|
#include "xrmoptions.h"
|
||||||
|
|
||||||
|
// Big thanks to Sean Pringle for this code.
|
||||||
|
// This maps xresource options to config structure.
|
||||||
|
typedef enum {
|
||||||
|
xrm_String = 0,
|
||||||
|
xrm_Number = 1
|
||||||
|
} XrmOptionType;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int type;
|
||||||
|
char * name ;
|
||||||
|
union {
|
||||||
|
unsigned int * num;
|
||||||
|
char ** str;
|
||||||
|
};
|
||||||
|
} XrmOption;
|
||||||
|
XrmOption xrmOptions[] = {
|
||||||
|
{ xrm_Number, "opacity", { .num = &config.window_opacity } },
|
||||||
|
{ xrm_Number, "width", { .num = &config.menu_width } },
|
||||||
|
{ xrm_Number, "lines", { .num = &config.menu_lines } },
|
||||||
|
{ xrm_String, "font", { .str = &config.menu_font } },
|
||||||
|
{ xrm_String, "foreground", { .str = &config.menu_fg } },
|
||||||
|
{ xrm_String, "background", { .str = &config.menu_bg } },
|
||||||
|
{ xrm_String, "highlightfg", { .str = &config.menu_hlfg } },
|
||||||
|
{ xrm_String, "highlightbg", { .str = &config.menu_hlbg } },
|
||||||
|
{ xrm_String, "bordercolor", { .str = &config.menu_bc } },
|
||||||
|
{ xrm_Number, "padding", { .num = &config.padding } },
|
||||||
|
{ xrm_Number, "borderwidth", { .num = &config.menu_bw} },
|
||||||
|
{ xrm_String, "terminal", { .str = &config.terminal_emulator } },
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void parse_xresource_options( Display *display )
|
||||||
|
{
|
||||||
|
// Map Xresource entries to simpleswitcher config options.
|
||||||
|
XrmInitialize();
|
||||||
|
char * xRMS = XResourceManagerString ( display );
|
||||||
|
|
||||||
|
if ( xRMS != NULL ) {
|
||||||
|
XrmDatabase xDB = XrmGetStringDatabase ( xRMS );
|
||||||
|
|
||||||
|
char * xrmType;
|
||||||
|
XrmValue xrmValue;
|
||||||
|
// TODO: update when we have new name.
|
||||||
|
const char * namePrefix = "simpleswitcher";
|
||||||
|
const char * classPrefix = "Simpleswitcher";
|
||||||
|
|
||||||
|
for ( unsigned int i = 0; i < sizeof ( xrmOptions ) / sizeof ( *xrmOptions ); ++i ) {
|
||||||
|
char *name = ( char* ) allocate( ( strlen ( namePrefix ) + 1 + strlen ( xrmOptions[i].name ) ) *
|
||||||
|
sizeof ( char ) + 1 );
|
||||||
|
char *class = ( char* ) allocate( ( strlen ( classPrefix ) + 1 + strlen ( xrmOptions[i].name ) ) *
|
||||||
|
sizeof ( char ) + 1 );
|
||||||
|
sprintf ( name, "%s.%s", namePrefix, xrmOptions[i].name );
|
||||||
|
sprintf ( class, "%s.%s", classPrefix, xrmOptions[i].name );
|
||||||
|
|
||||||
|
if ( XrmGetResource ( xDB, name, class, &xrmType, &xrmValue ) ) {
|
||||||
|
|
||||||
|
if ( xrmOptions[i].type == xrm_String ) {
|
||||||
|
*xrmOptions[i].str = ( char * ) allocate ( xrmValue.size * sizeof ( char ) );
|
||||||
|
strncpy ( *xrmOptions[i].str, xrmValue.addr, xrmValue.size );
|
||||||
|
} else if ( xrmOptions[i].type == xrm_Number ) {
|
||||||
|
*xrmOptions[i].num = strtol ( xrmValue.addr, NULL, 10 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free ( name );
|
||||||
|
free ( class );
|
||||||
|
}
|
||||||
|
|
||||||
|
XFree ( xRMS );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue