Tk-OS2src

 view release on metacpan or  search on metacpan

patches/diff_tkos2_800_05a  view on Meta::CPAN

@@ -333,8 +346,50 @@ WmInfo *wmPtr;
     }
 }
 
+
+TkWindow *	
+TkpGetWrapperWindow(TkWindow *winPtr) {
+    return winPtr->wmInfoPtr->reparent ? 
+	(TkWindow*) ((TkOS2Drawable*)winPtr->wmInfoPtr->reparent)->window.winPtr 
+	: winPtr;
+}
+
+void
+CreateMenubar(Tk_Window menubar, Tk_Window winPtr)
+{
+	WmInfo *wmPtr = ((TkWindow*)winPtr)->wmInfoPtr;
+	TkWindow *menubarPtr = (TkWindow *) menubar;
+	int ret;
 
-
+#if 0
+	XReparentWindow(Tk_Display(menubar), Tk_WindowId(menubar),
+		wmPtr->wrapperPtr->window, 0, 0);
+#else
+	ret = WinSetParent(TkOS2GetHWND(menubarPtr->window),
+			   TkOS2GetHWND(wmPtr->reparent), TRUE);
+#   ifdef DEBUG
+        if (ret != TRUE) {
+            printf("WinSetParent menubar c %x, p %x ERROR %x\n", TkOS2GetHWND(menubarPtr->window),
+			   TkOS2GetHWND(wmPtr->reparent),
+                   WinGetLastError(hab));
+        } else {
+            printf("WinSetParent menubar c %x, p %x OK\n", TkOS2GetHWND(menubarPtr->window),
+			   TkOS2GetHWND(wmPtr->reparent));
+        }
+#  endif 
+#endif 
+	menubarPtr->wmInfoPtr = wmPtr;
+	Tk_MoveResizeWindow(menubar, wmPtr->xInParent, 
+			    /* wmPtr->yInParent is for the main subwindow. */
+			    wmPtr->yInParent - wmPtr->menuHeight,
+			    Tk_Width(winPtr), wmPtr->menuHeight);
+	Tk_MapWindow(menubar);
+	Tk_CreateEventHandler(menubar, StructureNotifyMask, MenubarDestroyProc,
+		(ClientData) menubar);
+	Tk_ManageGeometry(menubar, &menubarMgrType, (ClientData) wmPtr);
+	menubarPtr->flags |= TK_REPARENTED;
+	wmPtr->flags |= ~WM_MB_NEVER_MAPPED;
+}
 
 /*
  *--------------------------------------------------------------
@@ -374,7 +429,7 @@ TkWmMapWindow(winPtr)
 #endif
 
     if (wmPtr->flags & WM_NEVER_MAPPED) {
-	int x, y, width, height;
+	int x, y, width, height, yInParent;
 	TkOS2Drawable *parentPtr;
 	HWND frame = NULLHANDLE;
         FRAMECDATA fcdata;
@@ -481,8 +536,13 @@ TkWmMapWindow(winPtr)
                    wmPtr->borderHeight);
 #endif
         }
+
+	yInParent = wmPtr->yInParent;
+	wmPtr->yInParent += wmPtr->menuHeight;
+
         if (wmPtr->exStyle & FCF_TITLEBAR) {
             wmPtr->borderHeight += titleBar;
+	    wmPtr->yInParent += titleBar;
 #ifdef DEBUG
             printf("FCF_TITLEBAR: bH now %d\n", wmPtr->borderHeight);
 #endif
@@ -497,7 +557,8 @@ TkWmMapWindow(winPtr)
         wmPtr->flags &= ~(WM_CREATE_PENDING|WM_MOVE_PENDING);
 
         width = wmPtr->borderWidth + winPtr->changes.width;
-        height = wmPtr->borderHeight + winPtr->changes.height;
+        height = wmPtr->borderHeight + winPtr->changes.height 
+	    + wmPtr->menuHeight;
 #ifdef DEBUG
         printf("+ height %d -> %d\n", winPtr->changes.height, height);
 #endif
@@ -631,10 +692,14 @@ TkWmMapWindow(winPtr)
         printf("    wmPtr->xInParent %d, wmPtr->yInParent %d\n",
                wmPtr->xInParent, wmPtr->yInParent);
 #endif
-        WinSetWindowPos(child, HWND_TOP, wmPtr->xInParent, wmPtr->yInParent,
+        WinSetWindowPos(child, HWND_TOP, wmPtr->xInParent, yInParent,
                   winPtr->changes.width, winPtr->changes.height,
                   SWP_SIZE | SWP_MOVE | SWP_SHOW);
 
+	/* Now process menubar: */
+	if (wmPtr->menubar)
+            CreateMenubar(wmPtr->menubar, winPtr);
+
 	/*
 	 * Generate a reparent event.
 	 */
@@ -662,6 +727,9 @@ TkWmMapWindow(winPtr)
 	}
 	UpdateGeometryInfo((ClientData) winPtr);
 
+        if ((wmPtr->flags & WM_MB_NEVER_MAPPED) && wmPtr->menubar)
+            CreateMenubar(wmPtr->menubar, winPtr);
+
 	/* If applicable, make visible in switch-list */
         if (wmPtr->exStyle & FCF_TASKLIST) {
             HSWITCH hSwitch;
@@ -688,9 +756,9 @@ TkWmMapWindow(winPtr)
             rc = WinChangeSwitchEntry(hSwitch, &switchData);
 #ifdef DEBUG
             if (rc != 0) {
-                printf("WinChangeSwitchEntry ERROR %x\n", WinGetLastError(hab));
+                printf("WinChangeSwitchEntry ON ERROR %x\n", WinGetLastError(hab));
             } else {
-                printf("WinChangeSwitchEntry %x OK\n", hSwitch);
+                printf("WinChangeSwitchEntry ON %x OK\n", hSwitch);
             }



( run in 2.374 seconds using v1.01-cache-2.11-cpan-6aa56a78535 )