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 // ----------------------------------------------------------------------------------------------