p/s proxy icon, rework window locks, segv in close_mixers + exportedl, ffmpeg default...
[goodguy/history.git] / cinelerra-5.1 / guicast / bcwindowbase.C
index 5b1331061d321bfb3dec45a55a8bacef288ff9fd..db085e863655fc86bc011af6c875b825a7d9d43a 100644 (file)
@@ -46,6 +46,7 @@
 #include "mutex.h"
 #include "sizes.h"
 #include "vframe.h"
+#include "workarounds.h"
 
 #ifdef HAVE_GL
 #include <GL/gl.h>
@@ -197,7 +198,7 @@ BC_WindowBase::~BC_WindowBase()
                };
                for( int i=sizeof(xft_font)/sizeof(xft_font[0]); --i>=0; ) {
                        XftFont *xft = (XftFont *)(this->*xft_font[i]);
-                       if( xft ) XftFontClose (display, xft);
+                       if( xft ) xftFontClose (display, xft);
                }
 #endif
                finit_im();
@@ -389,12 +390,8 @@ int BC_WindowBase::create_window(BC_WindowBase *parent_window, const char *title
 #endif
 
        id = get_resources()->get_id();
-       int need_lock = 0;
        if(parent_window) top_level = parent_window->top_level;
-       if( top_level ) { // need this to avoid deadlock with Xlib's locks
-               need_lock = 1;
-               lock_window("BC_WindowBase::create_window");
-       }
+       if( top_level ) lock_window("BC_WindowBase::create_window");
        get_resources()->create_window_lock->lock("BC_WindowBase::create_window");
 
 #ifdef HAVE_LIBXXF86VM
@@ -444,6 +441,7 @@ int BC_WindowBase::create_window(BC_WindowBase *parent_window, const char *title
                if( shm_completion_event < 0 ) shm_completion_event =
                        ShmCompletion + XShmGetEventBase(display);
 #endif
+               lock_window("BC_WindowBase::create_window 1");
 
                screen = DefaultScreen(display);
                rootwin = RootWindow(display, screen);
@@ -637,7 +635,7 @@ int BC_WindowBase::create_window(BC_WindowBase *parent_window, const char *title
                if(!hidden) show_window();
        }
        get_resources()->create_window_lock->unlock();
-       if(need_lock) unlock_window();
+       unlock_window();
 
        return 0;
 }
@@ -1266,6 +1264,8 @@ locking_message = event->xclient.message_type;
                case XK_F8:             key_pressed = KEY_F8;   break;
                case XK_F9:             key_pressed = KEY_F9;   break;
                case XK_F10:            key_pressed = KEY_F10;  break;
+               case XK_F11:            key_pressed = KEY_F11;  break;
+               case XK_F12:            key_pressed = KEY_F12;  break;
 
                case XK_Menu:           key_pressed = KPMENU;   break;  /* menu */
 // remote control
@@ -2363,54 +2363,54 @@ static Mutex xft_init_lock("BC_WindowBase::xft_init_lock", 0);
 xft_init_lock.lock("BC_WindowBase::init_xft");
        if(!(smallfont_xft =
                (resources.small_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.small_font_xft) :
-                       XftFontOpenName(display, screen, resources.small_font_xft))) )
+                       xftFontOpenXlfd(display, screen, resources.small_font_xft) :
+                       xftFontOpenName(display, screen, resources.small_font_xft))) )
                if(!(smallfont_xft =
-                       XftFontOpenXlfd(display, screen, resources.small_font_xft2)))
-                       smallfont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.small_font_xft2)))
+                       smallfont_xft = xftFontOpenXlfd(display, screen, "fixed");
        if(!(mediumfont_xft =
                (resources.medium_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.medium_font_xft) :
-                       XftFontOpenName(display, screen, resources.medium_font_xft))) )
+                       xftFontOpenXlfd(display, screen, resources.medium_font_xft) :
+                       xftFontOpenName(display, screen, resources.medium_font_xft))) )
                if(!(mediumfont_xft =
-                       XftFontOpenXlfd(display, screen, resources.medium_font_xft2)))
-                       mediumfont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.medium_font_xft2)))
+                       mediumfont_xft = xftFontOpenXlfd(display, screen, "fixed");
        if(!(largefont_xft =
                (resources.large_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.large_font_xft) :
-                       XftFontOpenName(display, screen, resources.large_font_xft))) )
+                       xftFontOpenXlfd(display, screen, resources.large_font_xft) :
+                       xftFontOpenName(display, screen, resources.large_font_xft))) )
                if(!(largefont_xft =
-                       XftFontOpenXlfd(display, screen, resources.large_font_xft2)))
-                       largefont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.large_font_xft2)))
+                       largefont_xft = xftFontOpenXlfd(display, screen, "fixed");
        if(!(bigfont_xft =
                (resources.big_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.big_font_xft) :
-                       XftFontOpenName(display, screen, resources.big_font_xft))) )
+                       xftFontOpenXlfd(display, screen, resources.big_font_xft) :
+                       xftFontOpenName(display, screen, resources.big_font_xft))) )
                if(!(bigfont_xft =
-                       XftFontOpenXlfd(display, screen, resources.big_font_xft2)))
-                       bigfont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.big_font_xft2)))
+                       bigfont_xft = xftFontOpenXlfd(display, screen, "fixed");
        if(!(clockfont_xft =
                (resources.clock_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.clock_font_xft) :
-                       XftFontOpenName(display, screen, resources.clock_font_xft))) )
-               clockfont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.clock_font_xft) :
+                       xftFontOpenName(display, screen, resources.clock_font_xft))) )
+               clockfont_xft = xftFontOpenXlfd(display, screen, "fixed");
 
 
        if(!(bold_smallfont_xft =
                (resources.small_b_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.small_b_font_xft) :
-                       XftFontOpenName(display, screen, resources.small_b_font_xft))) )
-               bold_smallfont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.small_b_font_xft) :
+                       xftFontOpenName(display, screen, resources.small_b_font_xft))) )
+               bold_smallfont_xft = xftFontOpenXlfd(display, screen, "fixed");
        if(!(bold_mediumfont_xft =
                (resources.medium_b_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.medium_b_font_xft) :
-                       XftFontOpenName(display, screen, resources.medium_b_font_xft))) )
-               bold_mediumfont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.medium_b_font_xft) :
+                       xftFontOpenName(display, screen, resources.medium_b_font_xft))) )
+               bold_mediumfont_xft = xftFontOpenXlfd(display, screen, "fixed");
        if(!(bold_largefont_xft =
                (resources.large_b_font_xft[0] == '-' ?
-                       XftFontOpenXlfd(display, screen, resources.large_b_font_xft) :
-                       XftFontOpenName(display, screen, resources.large_b_font_xft))) )
-               bold_largefont_xft = XftFontOpenXlfd(display, screen, "fixed");
+                       xftFontOpenXlfd(display, screen, resources.large_b_font_xft) :
+                       xftFontOpenName(display, screen, resources.large_b_font_xft))) )
+               bold_largefont_xft = xftFontOpenXlfd(display, screen, "fixed");
 
        if( !smallfont_xft || !mediumfont_xft || !largefont_xft || !bigfont_xft ||
            !bold_largefont_xft || !bold_mediumfont_xft || !bold_largefont_xft ||
@@ -2429,7 +2429,7 @@ xft_init_lock.lock("BC_WindowBase::init_xft");
                exit(1);
        }
 // _XftDisplayInfo needs a lock.
-       XftDefaultHasRender(display);
+       xftDefaultHasRender(display);
 xft_init_lock.unlock();
 #endif // HAVE_XFT
 }
@@ -2882,7 +2882,7 @@ int BC_WindowBase::get_single_text_width(int font, const char *text, int length)
 #ifdef X_HAVE_UTF8_STRING
                if(get_resources()->locale_utf8)
                {
-                       XftTextExtentsUtf8(top_level->display,
+                       xftTextExtentsUtf8(top_level->display,
                                get_xft_struct(font),
                                (const XftChar8 *)text,
                                length,
@@ -2891,7 +2891,7 @@ int BC_WindowBase::get_single_text_width(int font, const char *text, int length)
                else
 #endif
                {
-                       XftTextExtents8(top_level->display,
+                       xftTextExtents8(top_level->display,
                                get_xft_struct(font),
                                (const XftChar8 *)text,
                                length,