Mercurial > mplayer.hg
comparison Gui/wm/ws.c @ 2851:b64fa5d25142
add roleld mouse support and some small bugfix. neked jol a testedbe.
author | pontscho |
---|---|
date | Mon, 12 Nov 2001 12:26:09 +0000 |
parents | b52d3e6ff4ab |
children | fd44ecf77f8d |
comparison
equal
deleted
inserted
replaced
2850:2f1e40539fe2 | 2851:b64fa5d25142 |
---|---|
105 | 105 |
106 #define MWM_TEAROFF_WINDOW (1L<<0) | 106 #define MWM_TEAROFF_WINDOW (1L<<0) |
107 | 107 |
108 void wsWindowDecoration( wsTWindow * win,long d ) | 108 void wsWindowDecoration( wsTWindow * win,long d ) |
109 { | 109 { |
110 //XUnmapWindow( wsDisplay,win->WindowID ); | |
110 wsMotifHints=XInternAtom( wsDisplay,"_MOTIF_WM_HINTS",0 ); | 111 wsMotifHints=XInternAtom( wsDisplay,"_MOTIF_WM_HINTS",0 ); |
111 if ( wsMotifHints != None ) | 112 if ( wsMotifHints != None ) |
112 { | 113 { |
113 memset( &wsMotifWmHints,0,sizeof( MotifWmHints ) ); | 114 memset( &wsMotifWmHints,0,sizeof( MotifWmHints ) ); |
114 wsMotifWmHints.flags=( d?0:MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS ); | 115 wsMotifWmHints.flags=( d?0:MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS ); |
115 wsMotifWmHints.functions=( d?0:MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE ); | 116 wsMotifWmHints.functions=( d?0:MWM_FUNC_MOVE | MWM_FUNC_CLOSE | MWM_FUNC_MINIMIZE | MWM_FUNC_MAXIMIZE | MWM_FUNC_RESIZE ); |
116 wsMotifWmHints.decorations=( d?MWM_DECOR_ALL:0 ); | 117 wsMotifWmHints.decorations=( d?MWM_DECOR_ALL:0 ); |
117 XChangeProperty( wsDisplay,win->WindowID,wsMotifHints,wsMotifHints,32, | 118 XChangeProperty( wsDisplay,win->WindowID,wsMotifHints,wsMotifHints,32, |
118 PropModeReplace,(unsigned char *)&wsMotifWmHints,5 ); | 119 PropModeReplace,(unsigned char *)&wsMotifWmHints,5 ); |
119 } | 120 } |
121 //XMapWindow( wsDisplay,win->WindowID ); | |
122 // if ( d ) | |
123 // { | |
124 // win->SizeHint.win_gravity=ForgetGravity; | |
125 // } | |
126 // else | |
127 // { | |
128 // win->SizeHint.win_gravity=StaticGravity; | |
129 // } | |
130 // win->SizeHint.flags=PWinGravity; | |
131 // XSetWMSizeHints( wsDisplay,win->WindowID,&win->SizeHint,win->AtomWMSizeHint ); | |
120 } | 132 } |
121 | 133 |
122 // ---------------------------------------------------------------------------------------------- | 134 // ---------------------------------------------------------------------------------------------- |
123 // Init X Window System. | 135 // Init X Window System. |
124 // ---------------------------------------------------------------------------------------------- | 136 // ---------------------------------------------------------------------------------------------- |
348 // --- | 360 // --- |
349 win->AtomLeaderClient=XInternAtom( wsDisplay,"WM_CLIENT_LEADER",False ); | 361 win->AtomLeaderClient=XInternAtom( wsDisplay,"WM_CLIENT_LEADER",False ); |
350 win->AtomDeleteWindow=XInternAtom( wsDisplay,"WM_DELETE_WINDOW",False ); | 362 win->AtomDeleteWindow=XInternAtom( wsDisplay,"WM_DELETE_WINDOW",False ); |
351 win->AtomTakeFocus=XInternAtom( wsDisplay,"WM_TAKE_FOCUS",False ); | 363 win->AtomTakeFocus=XInternAtom( wsDisplay,"WM_TAKE_FOCUS",False ); |
352 win->AtomRolle=XInternAtom( wsDisplay,"WM_WINDOW_ROLE",False ); | 364 win->AtomRolle=XInternAtom( wsDisplay,"WM_WINDOW_ROLE",False ); |
365 win->AtomWMSizeHint=XInternAtom( wsDisplay,"WM_SIZE_HINT",False ); | |
366 win->AtomWMNormalHint=XInternAtom( wsDisplay,"WM_NORMAL_HINT",False ); | |
353 win->AtomProtocols=XInternAtom( wsDisplay,"WM_PROTOCOLS",False ); | 367 win->AtomProtocols=XInternAtom( wsDisplay,"WM_PROTOCOLS",False ); |
354 { | 368 { |
355 char buf[32]; int i; | 369 char buf[32]; int i; |
356 sprintf( buf,"_%s_REMOTE",label ); | 370 sprintf( buf,"_%s_REMOTE",label ); |
357 for( i=0;i<strlen( buf );i++ ) | 371 for( i=0;i<strlen( buf );i++ ) |
404 | 418 |
405 wsClassHint.res_name=label; | 419 wsClassHint.res_name=label; |
406 wsClassHint.res_class="MPlayer"; | 420 wsClassHint.res_class="MPlayer"; |
407 XSetClassHint( wsDisplay,win->WindowID,&wsClassHint ); | 421 XSetClassHint( wsDisplay,win->WindowID,&wsClassHint ); |
408 | 422 |
409 win->SizeHint.flags=PPosition | PSize | PResizeInc; // | PBaseSize | 423 win->SizeHint.flags=PPosition | PSize | PResizeInc | PWinGravity; // | PBaseSize |
410 win->SizeHint.x=win->X; | 424 win->SizeHint.x=win->X; |
411 win->SizeHint.y=win->Y; | 425 win->SizeHint.y=win->Y; |
412 win->SizeHint.width=win->Width; | 426 win->SizeHint.width=win->Width; |
413 win->SizeHint.height=win->Height; | 427 win->SizeHint.height=win->Height; |
414 if ( D & wsMinSize ) | 428 if ( D & wsMinSize ) |
425 } | 439 } |
426 win->SizeHint.height_inc=1; | 440 win->SizeHint.height_inc=1; |
427 win->SizeHint.width_inc=1; | 441 win->SizeHint.width_inc=1; |
428 // win->SizeHint.base_width=win->Width; | 442 // win->SizeHint.base_width=win->Width; |
429 // win->SizeHint.base_height=win->Height; | 443 // win->SizeHint.base_height=win->Height; |
444 win->SizeHint.win_gravity=StaticGravity; | |
430 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); | 445 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); |
431 | 446 |
432 win->WMHints.flags=InputHint | StateHint; | 447 win->WMHints.flags=InputHint | StateHint; |
433 win->WMHints.input=True; | 448 win->WMHints.input=True; |
434 win->WMHints.initial_state=NormalState; | 449 win->WMHints.initial_state=NormalState; |
572 | 587 |
573 case MapNotify: i=wsWindowMapped; wsWindowList[l]->Mapped=wsMapped; goto expose; | 588 case MapNotify: i=wsWindowMapped; wsWindowList[l]->Mapped=wsMapped; goto expose; |
574 case UnmapNotify: i=wsWindowUnmapped; wsWindowList[l]->Mapped=wsNone; goto expose; | 589 case UnmapNotify: i=wsWindowUnmapped; wsWindowList[l]->Mapped=wsNone; goto expose; |
575 case FocusIn: | 590 case FocusIn: |
576 if ( wsWindowList[l]->Focused == wsFocused ) break; | 591 if ( wsWindowList[l]->Focused == wsFocused ) break; |
577 i=wsWindowFocusIn; | 592 i=wsWindowFocusIn; |
578 wsWindowList[l]->Focused=wsFocused; | 593 wsWindowList[l]->Focused=wsFocused; |
579 goto expose; | 594 goto expose; |
580 case FocusOut: | 595 case FocusOut: |
581 if ( wsWindowList[l]->Focused == wsNone ) break; | 596 if ( wsWindowList[l]->Focused == wsNone ) break; |
582 i=wsWindowFocusOut; | 597 i=wsWindowFocusOut; |
583 wsWindowList[l]->Focused=wsNone; | 598 wsWindowList[l]->Focused=wsNone; |
584 goto expose; | 599 goto expose; |
585 case VisibilityNotify: | 600 case VisibilityNotify: |
586 switch( Event->xvisibility.state ) | 601 switch( Event->xvisibility.state ) |
587 { | 602 { |
588 case VisibilityUnobscured: i=wsWindowVisible; wsWindowList[l]->Visible=wsVisible; goto expose; | 603 case VisibilityUnobscured: i=wsWindowVisible; wsWindowList[l]->Visible=wsVisible; goto expose; |
589 case VisibilityFullyObscured: i=wsWindowNotVisible; wsWindowList[l]->Visible=wsNotVisible; goto expose; | 604 case VisibilityFullyObscured: i=wsWindowNotVisible; wsWindowList[l]->Visible=wsNotVisible; goto expose; |
646 buttonreleased: | 661 buttonreleased: |
647 if ( wsWindowList[l]->MouseHandler ) | 662 if ( wsWindowList[l]->MouseHandler ) |
648 wsWindowList[l]->MouseHandler( i,Event->xbutton.x,Event->xbutton.y,Event->xmotion.x_root,Event->xmotion.y_root ); | 663 wsWindowList[l]->MouseHandler( i,Event->xbutton.x,Event->xbutton.y,Event->xmotion.x_root,Event->xmotion.y_root ); |
649 break; | 664 break; |
650 | 665 |
666 case GravityNotify: | |
667 // #ifdef DEBUG | |
668 fprintf( stderr,"[ws] window ( 0x%x ) gravity: %d,%d\n",wsWindowList[l]->WindowID,Event->xgravity.x,Event->xgravity.y ); | |
669 // #endif | |
670 break; | |
671 | |
651 case PropertyNotify: | 672 case PropertyNotify: |
652 // break; | 673 // break; |
653 // #ifdef DEBUG | 674 // #ifdef DEBUG |
654 // fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",wsWindowList[l]->WindowID,XGetAtomName( wsDisplay,Event->xproperty.atom ),Event->xproperty.atom ); | 675 // fprintf(stderr,"[ws] PropertyNotify ( 0x%x ) %s ( 0x%x )\n",wsWindowList[l]->WindowID,XGetAtomName( wsDisplay,Event->xproperty.atom ),Event->xproperty.atom ); |
655 // #endif | 676 // #endif |
656 if ( Event->xproperty.atom == wsWindowList[l]->AtomRemote ) | 677 if ( Event->xproperty.atom == wsWindowList[l]->AtomRemote ) |
657 { | 678 { |
658 Atom type; | 679 Atom type; |
659 int format; | 680 int format; |
660 unsigned long nitems, bytesafter; | 681 unsigned long nitems, bytesafter; |
670 &args ); | 691 &args ); |
671 if ( ( nitems )&&( wsWindowList[l]->RemoteHandler ) ) | 692 if ( ( nitems )&&( wsWindowList[l]->RemoteHandler ) ) |
672 { | 693 { |
673 args[strlen( args ) - 1]=0; | 694 args[strlen( args ) - 1]=0; |
674 wsWindowList[l]->RemoteHandler( args ); | 695 wsWindowList[l]->RemoteHandler( args ); |
675 #ifdef DEBUG | 696 #ifdef DEBUG |
676 fprintf( stderr,"[ws] args: '%s'\n",args ); | 697 fprintf( stderr,"[ws] args: '%s'\n",args ); |
677 #endif | 698 #endif |
678 args[strlen( args ) - 1]=1; | 699 args[strlen( args ) - 1]=1; |
679 XFree( args ); | 700 XFree( args ); |
680 } | 701 } |
681 } | 702 } |
682 break; | 703 break; |
848 case -1: win->Y=( wsMaxY / 2 ) - ( win->Height / 2 ); break; | 869 case -1: win->Y=( wsMaxY / 2 ) - ( win->Height / 2 ); break; |
849 case -2: win->Y=wsMaxY - win->Height; break; | 870 case -2: win->Y=wsMaxY - win->Height; break; |
850 default: win->Y=y; break; | 871 default: win->Y=y; break; |
851 } | 872 } |
852 | 873 |
853 win->SizeHint.flags=PPosition; | 874 win->SizeHint.flags=PPosition | PWinGravity; |
854 win->SizeHint.x=win->X; | 875 win->SizeHint.x=win->X; |
855 win->SizeHint.y=win->Y; | 876 win->SizeHint.y=win->Y; |
877 win->SizeHint.win_gravity=StaticGravity; | |
856 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); | 878 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); |
857 | 879 |
858 XMoveWindow( wsDisplay,win->WindowID,win->X,win->Y ); | 880 XMoveWindow( wsDisplay,win->WindowID,win->X,win->Y ); |
859 if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height ); | 881 if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height ); |
860 } | 882 } |
865 void wsResizeWindow( wsTWindow * win,int sx, int sy ) | 887 void wsResizeWindow( wsTWindow * win,int sx, int sy ) |
866 { | 888 { |
867 win->Width=sx; | 889 win->Width=sx; |
868 win->Height=sy; | 890 win->Height=sy; |
869 | 891 |
870 win->SizeHint.flags=PSize; | 892 win->SizeHint.flags=PSize | PWinGravity; |
871 win->SizeHint.width=win->Width; | 893 win->SizeHint.width=win->Width; |
872 win->SizeHint.height=win->Height; | 894 win->SizeHint.height=win->Height; |
873 if ( win->Property & wsMinSize ) | 895 if ( win->Property & wsMinSize ) |
874 { | 896 { |
875 win->SizeHint.flags|=PMinSize; | 897 win->SizeHint.flags|=PMinSize; |
880 { | 902 { |
881 win->SizeHint.flags|=PMaxSize; | 903 win->SizeHint.flags|=PMaxSize; |
882 win->SizeHint.max_width=win->Width; | 904 win->SizeHint.max_width=win->Width; |
883 win->SizeHint.max_height=win->Height; | 905 win->SizeHint.max_height=win->Height; |
884 } | 906 } |
907 win->SizeHint.win_gravity=StaticGravity; | |
885 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); | 908 XSetWMNormalHints( wsDisplay,win->WindowID,&win->SizeHint ); |
886 XResizeWindow( wsDisplay,win->WindowID,sx,sy ); | 909 XResizeWindow( wsDisplay,win->WindowID,sx,sy ); |
887 if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height ); | 910 if ( win->ReSize ) win->ReSize( win->X,win->Y,win->Width,win->Height ); |
888 } | 911 } |
889 | 912 |
895 | 918 |
896 // ---------------------------------------------------------------------------------------------- | 919 // ---------------------------------------------------------------------------------------------- |
897 // Move top the window. | 920 // Move top the window. |
898 // ---------------------------------------------------------------------------------------------- | 921 // ---------------------------------------------------------------------------------------------- |
899 void wsMoveTopWindow( wsTWindow * win ) | 922 void wsMoveTopWindow( wsTWindow * win ) |
900 { | 923 { |
901 // XUnmapWindow( wsDisplay,win->WindowID ); XMapWindow( wsDisplay,win->WindowID ); | 924 // XUnmapWindow( wsDisplay,win->WindowID ); XMapWindow( wsDisplay,win->WindowID ); |
902 XRaiseWindow( wsDisplay,win->WindowID ); | 925 XRaiseWindow( wsDisplay,win->WindowID ); |
903 } | 926 } |
904 | 927 |
905 // ---------------------------------------------------------------------------------------------- | 928 // ---------------------------------------------------------------------------------------------- |
906 // Set window background to 'color'. | 929 // Set window background to 'color'. |
907 // ---------------------------------------------------------------------------------------------- | 930 // ---------------------------------------------------------------------------------------------- |