Mixer: Add --no-ui commandline option and non-mixer-noui executable symlink to permit running an instance of non-mixer without connecting to an X display.
This commit is contained in:
parent
3a999ecc86
commit
ee8764495f
|
@ -28,6 +28,7 @@ clean:
|
||||||
install: all
|
install: all
|
||||||
@ echo -n "Installing..."
|
@ echo -n "Installing..."
|
||||||
@ install -Dm755 src/mixer "$(DESTDIR)$(prefix)"/bin/non-mixer
|
@ install -Dm755 src/mixer "$(DESTDIR)$(prefix)"/bin/non-mixer
|
||||||
|
@ ln -s "$(DESTDIR)$(prefix)"/bin/non-mixer "$(DESTDIR)$(prefix)"/bin/non-mixer-noui
|
||||||
@ install -d "$(DESTDIR)$(SYSTEM_PATH)"/non-mixer
|
@ install -d "$(DESTDIR)$(SYSTEM_PATH)"/non-mixer
|
||||||
@ $(MAKE) -s -C doc install
|
@ $(MAKE) -s -C doc install
|
||||||
@ install -d "$(DESTDIR)$(PIXMAP_PATH)/non-mixer"
|
@ install -d "$(DESTDIR)$(PIXMAP_PATH)/non-mixer"
|
||||||
|
|
143
mixer/src/main.C
143
mixer/src/main.C
|
@ -57,6 +57,7 @@
|
||||||
#include "NSM.H"
|
#include "NSM.H"
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef HAVE_XPM
|
#ifdef HAVE_XPM
|
||||||
#include "FL/Fl.H"
|
#include "FL/Fl.H"
|
||||||
|
@ -107,7 +108,7 @@ check_nsm ( void * v )
|
||||||
Fl::repeat_timeout( NSM_CHECK_INTERVAL, check_nsm, v );
|
Fl::repeat_timeout( NSM_CHECK_INTERVAL, check_nsm, v );
|
||||||
}
|
}
|
||||||
|
|
||||||
static int got_sigterm = 0;
|
static volatile int got_sigterm = 0;
|
||||||
|
|
||||||
void
|
void
|
||||||
sigterm_handler ( int )
|
sigterm_handler ( int )
|
||||||
|
@ -129,21 +130,10 @@ check_sigterm ( void * )
|
||||||
int
|
int
|
||||||
main ( int argc, char **argv )
|
main ( int argc, char **argv )
|
||||||
{
|
{
|
||||||
|
bool no_ui = false;
|
||||||
|
|
||||||
printf( "%s %s %s -- %s\n", APP_TITLE, VERSION, "", COPYRIGHT );
|
printf( "%s %s %s -- %s\n", APP_TITLE, VERSION, "", COPYRIGHT );
|
||||||
|
|
||||||
if ( ! Fl::visual( FL_DOUBLE | FL_RGB ) )
|
|
||||||
{
|
|
||||||
WARNING( "Xdbe not supported, FLTK will fake double buffering." );
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_XPM
|
|
||||||
fl_open_display();
|
|
||||||
Pixmap p, mask;
|
|
||||||
|
|
||||||
XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display),
|
|
||||||
(char**)icon_16x16, &p, &mask, NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Thread::init();
|
Thread::init();
|
||||||
|
|
||||||
Thread thread( "UI" );
|
Thread thread( "UI" );
|
||||||
|
@ -160,9 +150,6 @@ main ( int argc, char **argv )
|
||||||
Fl_Tooltip::size( 14 );
|
Fl_Tooltip::size( 14 );
|
||||||
Fl_Tooltip::hoverdelay( 0.1f );
|
Fl_Tooltip::hoverdelay( 0.1f );
|
||||||
|
|
||||||
Fl::visible_focus( 0 );
|
|
||||||
|
|
||||||
fl_register_images();
|
|
||||||
|
|
||||||
LOG_REGISTER_CREATE( Mixer_Strip );
|
LOG_REGISTER_CREATE( Mixer_Strip );
|
||||||
LOG_REGISTER_CREATE( Chain );
|
LOG_REGISTER_CREATE( Chain );
|
||||||
|
@ -176,36 +163,6 @@ main ( int argc, char **argv )
|
||||||
|
|
||||||
signal( SIGPIPE, SIG_IGN );
|
signal( SIGPIPE, SIG_IGN );
|
||||||
|
|
||||||
Fl::lock();
|
|
||||||
|
|
||||||
Fl_Double_Window *main_window;
|
|
||||||
|
|
||||||
{
|
|
||||||
Fl_Double_Window *o = main_window = new Fl_Double_Window( 800, 600, "Non-DAW : Mixer" );
|
|
||||||
{
|
|
||||||
main_window->xclass( APP_NAME );
|
|
||||||
|
|
||||||
{
|
|
||||||
Fl_Widget *o = mixer = new Mixer( 0, 0, main_window->w(), main_window->h(), NULL );
|
|
||||||
Fl_Group::current()->resizable(o);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
o->end();
|
|
||||||
|
|
||||||
o->size_range( main_window->w(), mixer->min_h(), 0, 0 );
|
|
||||||
|
|
||||||
o->callback( (Fl_Callback*)cb_main, main_window );
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_XPM
|
|
||||||
o->icon((char *)p);
|
|
||||||
#endif
|
|
||||||
o->show( 0, 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
fl_register_themes();
|
|
||||||
|
|
||||||
Fl_Theme::set();
|
|
||||||
|
|
||||||
const char *osc_port = NULL;
|
const char *osc_port = NULL;
|
||||||
|
|
||||||
|
@ -219,6 +176,7 @@ main ( int argc, char **argv )
|
||||||
{ "help", no_argument, 0, '?' },
|
{ "help", no_argument, 0, '?' },
|
||||||
{ "instance", required_argument, 0, 'i' },
|
{ "instance", required_argument, 0, 'i' },
|
||||||
{ "osc-port", required_argument, 0, 'p' },
|
{ "osc-port", required_argument, 0, 'p' },
|
||||||
|
{ "no-ui", no_argument, 0, 'u' },
|
||||||
{ 0, 0, 0, 0 }
|
{ 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -240,6 +198,10 @@ main ( int argc, char **argv )
|
||||||
instance_name = strdup( optarg );
|
instance_name = strdup( optarg );
|
||||||
instance_override = true;
|
instance_override = true;
|
||||||
break;
|
break;
|
||||||
|
case 'u':
|
||||||
|
DMESSAGE( "Disabling user interface" );
|
||||||
|
no_ui = true;
|
||||||
|
break;
|
||||||
case '?':
|
case '?':
|
||||||
printf( "\nUsage: %s [--instance instance_name] [--osc-port portnum] [path_to_project]\n\n", argv[0] );
|
printf( "\nUsage: %s [--instance instance_name] [--osc-port portnum] [path_to_project]\n\n", argv[0] );
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -247,6 +209,70 @@ main ( int argc, char **argv )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
char *name = strdup( argv[0] );
|
||||||
|
char *n = basename( name );
|
||||||
|
|
||||||
|
if ( ! strcmp( n, "non-mixer-noui" ) )
|
||||||
|
no_ui = true;
|
||||||
|
|
||||||
|
free( name );
|
||||||
|
}
|
||||||
|
|
||||||
|
Pixmap p, mask;
|
||||||
|
|
||||||
|
if ( ! no_ui )
|
||||||
|
{
|
||||||
|
Fl::visual( FL_DOUBLE | FL_RGB );
|
||||||
|
|
||||||
|
#ifdef HAVE_XPM
|
||||||
|
fl_open_display();
|
||||||
|
|
||||||
|
XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display),
|
||||||
|
(char**)icon_16x16, &p, &mask, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Fl::visible_focus( 0 );
|
||||||
|
|
||||||
|
fl_register_images();
|
||||||
|
}
|
||||||
|
|
||||||
|
Fl::lock();
|
||||||
|
|
||||||
|
Fl_Double_Window *main_window;
|
||||||
|
|
||||||
|
{
|
||||||
|
Fl_Double_Window *o = main_window = new Fl_Double_Window( 800, 600, "Non-DAW : Mixer" );
|
||||||
|
{
|
||||||
|
main_window->xclass( APP_NAME );
|
||||||
|
|
||||||
|
{
|
||||||
|
Fl_Widget *o = mixer = new Mixer( 0, 0, main_window->w(), main_window->h(), NULL );
|
||||||
|
Fl_Group::current()->resizable(o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
o->end();
|
||||||
|
|
||||||
|
o->size_range( main_window->w(), mixer->min_h(), 0, 0 );
|
||||||
|
|
||||||
|
o->callback( (Fl_Callback*)cb_main, main_window );
|
||||||
|
|
||||||
|
if ( ! no_ui )
|
||||||
|
{
|
||||||
|
#ifdef HAVE_XPM
|
||||||
|
o->icon((char *)p);
|
||||||
|
#endif
|
||||||
|
o->show( 0, 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! no_ui )
|
||||||
|
{
|
||||||
|
fl_register_themes();
|
||||||
|
|
||||||
|
Fl_Theme::set();
|
||||||
|
}
|
||||||
|
|
||||||
Plugin_Module::spawn_discover_thread();
|
Plugin_Module::spawn_discover_thread();
|
||||||
|
|
||||||
mixer->init_osc( osc_port );
|
mixer->init_osc( osc_port );
|
||||||
|
@ -265,8 +291,11 @@ main ( int argc, char **argv )
|
||||||
|
|
||||||
nsm->announce( APP_NAME, ":switch:dirty:", argv[0] );
|
nsm->announce( APP_NAME, ":switch:dirty:", argv[0] );
|
||||||
|
|
||||||
// poll so we can keep OSC handlers running in the GUI thread and avoid extra sync
|
/* if ( ! no_ui ) */
|
||||||
Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL );
|
/* { */
|
||||||
|
// poll so we can keep OSC handlers running in the GUI thread and avoid extra sync
|
||||||
|
Fl::add_timeout( NSM_CHECK_INTERVAL, check_nsm, NULL );
|
||||||
|
/* } */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -289,7 +318,21 @@ main ( int argc, char **argv )
|
||||||
|
|
||||||
Fl::add_check( check_sigterm );
|
Fl::add_check( check_sigterm );
|
||||||
|
|
||||||
Fl::run();
|
if ( ! no_ui )
|
||||||
|
{
|
||||||
|
DMESSAGE( "Running UI..." );
|
||||||
|
|
||||||
|
Fl::run();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DMESSAGE( "Not Running UI..." );
|
||||||
|
while ( ! got_sigterm )
|
||||||
|
{
|
||||||
|
Fl::check();
|
||||||
|
usleep( 200 * 1000 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delete main_window;
|
delete main_window;
|
||||||
main_window = NULL;
|
main_window = NULL;
|
||||||
|
|
Loading…
Reference in New Issue