diff --git a/WINGs/WINGs/WINGsP.h b/WINGs/WINGs/WINGsP.h index 40debb9c..91b4d59d 100644 --- a/WINGs/WINGs/WINGsP.h +++ b/WINGs/WINGs/WINGsP.h @@ -23,105 +23,34 @@ extern "C" { #endif /* __cplusplus */ +/* ---[ global settigns ]------------------------------------------------- */ #define DOUBLE_BUFFER 1 -#define WC_UserWidget 128 - #define SCROLLER_WIDTH 20 +typedef struct _WINGsConfiguration { + char *systemFont; + char *boldSystemFont; + int defaultFontSize; + Bool antialiasedText; + char *floppyPath; + unsigned doubleClickDelay; + unsigned mouseWheelUp; + unsigned mouseWheelDown; +} _WINGsConfiguration; + +extern _WINGsConfiguration WINGsConfiguration; + + +/* ---[ drag*.c ]--------------------------------------------------------- */ + +/* + * We need to define these structure first because they are used in W_Screen + * below. The rest of drag-related stuff if after because it needs W_Screen + */ #define XDND_VERSION 3 - -typedef struct W_Application { - char *applicationName; - int argc; - char **argv; - char *resourcePath; -} W_Application; - - -typedef struct W_Font { - struct W_Screen *screen; - - struct _XftFont *font; - - short height; - short y; - short refCount; - char *name; -} W_Font; - - -typedef struct W_Pixmap { - struct W_Screen *screen; - Pixmap pixmap; - Pixmap mask; - unsigned short width; - unsigned short height; - short depth; - short refCount; -} W_Pixmap; - - -typedef struct W_Color { - struct W_Screen *screen; - - XColor color; - unsigned short alpha; - short refCount; - GC gc; - struct { - unsigned int exact:1; - } flags; -} W_Color; - - -typedef struct W_FocusInfo { - struct W_View *toplevel; - struct W_View *focused; /* view that has the focus in this toplevel */ - struct W_FocusInfo *next; -} W_FocusInfo; - - - -typedef void* W_DndState(WMView *destView, XClientMessageEvent *event, - WMDraggingInfo *info); - - -typedef struct W_DragOperationItem { - WMDragOperationType type; - char* text; -} W_DragOperationItem; - - -typedef struct W_DragSourceInfo { - WMView *sourceView; - Window destinationWindow; - W_DndState *state; - WMSelectionProcs *selectionProcs; - Window icon; - WMPoint imageLocation; - WMPoint mouseOffset; /* mouse pos in icon */ - Cursor dragCursor; - WMRect noPositionMessageZone; - Atom firstThreeTypes[3]; -} W_DragSourceInfo; - - -typedef struct W_DragDestinationInfo { - WMView *destView; - WMView *xdndAwareView; - Window sourceWindow; - W_DndState *state; - Bool sourceActionChanged; - WMArray *sourceTypes; - WMArray *requiredTypes; - Bool typeListAvailable; - WMArray *dropDatas; -} W_DragDestinationInfo; - - typedef struct W_DraggingInfo { unsigned char protocolVersion; /* version supported on the other side */ Time timestamp; @@ -129,10 +58,22 @@ typedef struct W_DraggingInfo { Atom sourceAction; Atom destinationAction; - W_DragSourceInfo* sourceInfo; /* infos needed by source */ - W_DragDestinationInfo* destInfo; /* infos needed by destination */ + struct W_DragSourceInfo* sourceInfo; /* infos needed by source */ + struct W_DragDestinationInfo* destInfo; /* infos needed by destination */ } W_DraggingInfo; +/* ---[ Structures from WINGs.h ]----------------------------------------- */ + +/* Pre-definition of internal structs */ +typedef struct W_Color W_Color; +typedef struct W_Pixmap W_Pixmap; +typedef struct W_View W_View; + +typedef struct W_FocusInfo { + W_View *toplevel; + W_View *focused; /* view that has the focus in this toplevel */ + struct W_FocusInfo *next; +} W_FocusInfo; typedef struct W_Screen { Display *display; @@ -147,7 +88,7 @@ typedef struct W_Screen { Window rootWin; - struct W_View *rootView; + W_View *rootView; RContext *rcontext; @@ -160,7 +101,7 @@ typedef struct W_Screen { W_FocusInfo *focusInfo; RImage *applicationIconImage; /* image (can have alpha channel) */ - struct W_Pixmap *applicationIconPixmap; /* pixmap - no alpha channel */ + W_Pixmap *applicationIconPixmap; /* pixmap - no alpha channel */ Window applicationIconWindow; struct W_Window *windowList; /* list of windows in the app */ @@ -184,8 +125,8 @@ typedef struct W_Screen { Pixmap stipple; - struct W_View *dragSourceView; - struct W_DraggingInfo dragInfo; + W_View *dragSourceView; + W_DraggingInfo dragInfo; /* colors */ W_Color *white; @@ -208,9 +149,9 @@ typedef struct W_Screen { GC drawImStringGC; /* for WMDrawImageString() */ - W_Font *normalFont; + struct W_Font *normalFont; - W_Font *boldFont; + struct W_Font *boldFont; WMHashTable *fontCache; @@ -221,57 +162,57 @@ typedef struct W_Screen { struct W_Balloon *balloon; - struct W_Pixmap *checkButtonImageOn; - struct W_Pixmap *checkButtonImageOff; + W_Pixmap *checkButtonImageOn; + W_Pixmap *checkButtonImageOff; - struct W_Pixmap *radioButtonImageOn; - struct W_Pixmap *radioButtonImageOff; + W_Pixmap *radioButtonImageOn; + W_Pixmap *radioButtonImageOff; - struct W_Pixmap *buttonArrow; - struct W_Pixmap *pushedButtonArrow; + W_Pixmap *buttonArrow; + W_Pixmap *pushedButtonArrow; - struct W_Pixmap *scrollerDimple; + W_Pixmap *scrollerDimple; - struct W_Pixmap *upArrow; - struct W_Pixmap *downArrow; - struct W_Pixmap *leftArrow; - struct W_Pixmap *rightArrow; + W_Pixmap *upArrow; + W_Pixmap *downArrow; + W_Pixmap *leftArrow; + W_Pixmap *rightArrow; - struct W_Pixmap *hiUpArrow; - struct W_Pixmap *hiDownArrow; - struct W_Pixmap *hiLeftArrow; - struct W_Pixmap *hiRightArrow; + W_Pixmap *hiUpArrow; + W_Pixmap *hiDownArrow; + W_Pixmap *hiLeftArrow; + W_Pixmap *hiRightArrow; - struct W_Pixmap *pullDownIndicator; - struct W_Pixmap *popUpIndicator; + W_Pixmap *pullDownIndicator; + W_Pixmap *popUpIndicator; - struct W_Pixmap *checkMark; + W_Pixmap *checkMark; - struct W_Pixmap *homeIcon; - struct W_Pixmap *altHomeIcon; + W_Pixmap *homeIcon; + W_Pixmap *altHomeIcon; - struct W_Pixmap *trashcanIcon; - struct W_Pixmap *altTrashcanIcon; + W_Pixmap *trashcanIcon; + W_Pixmap *altTrashcanIcon; - struct W_Pixmap *createDirIcon; - struct W_Pixmap *altCreateDirIcon; + W_Pixmap *createDirIcon; + W_Pixmap *altCreateDirIcon; - struct W_Pixmap *disketteIcon; - struct W_Pixmap *altDisketteIcon; - struct W_Pixmap *unmountIcon; - struct W_Pixmap *altUnmountIcon; + W_Pixmap *disketteIcon; + W_Pixmap *altDisketteIcon; + W_Pixmap *unmountIcon; + W_Pixmap *altUnmountIcon; - struct W_Pixmap *magnifyIcon; - /*struct W_Pixmap *altMagnifyIcon;*/ - struct W_Pixmap *wheelIcon; - struct W_Pixmap *grayIcon; - struct W_Pixmap *rgbIcon; - struct W_Pixmap *cmykIcon; - struct W_Pixmap *hsbIcon; - struct W_Pixmap *customPaletteIcon; - struct W_Pixmap *colorListIcon; + W_Pixmap *magnifyIcon; + /*W_Pixmap *altMagnifyIcon;*/ + W_Pixmap *wheelIcon; + W_Pixmap *grayIcon; + W_Pixmap *rgbIcon; + W_Pixmap *cmykIcon; + W_Pixmap *hsbIcon; + W_Pixmap *customPaletteIcon; + W_Pixmap *colorListIcon; - struct W_Pixmap *defaultObjectIcon; + W_Pixmap *defaultObjectIcon; Cursor defaultCursor; @@ -324,23 +265,260 @@ typedef struct W_Screen { unsigned ignoreNextDoubleClick:1; } W_Screen; +#define W_DRAWABLE(scr) (scr)->rcontext->drawable +/* ---[ drag*.c ]--------------------------------------------------------- */ + +typedef struct W_DragOperationItem { + WMDragOperationType type; + char* text; +} W_DragOperationItem; + +typedef void* W_DndState(WMView *destView, XClientMessageEvent *event, + WMDraggingInfo *info); + +typedef struct W_DragSourceInfo { + WMView *sourceView; + Window destinationWindow; + W_DndState *state; + WMSelectionProcs *selectionProcs; + Window icon; + WMPoint imageLocation; + WMPoint mouseOffset; /* mouse pos in icon */ + Cursor dragCursor; + WMRect noPositionMessageZone; + Atom firstThreeTypes[3]; +} W_DragSourceInfo; + +typedef struct W_DragDestinationInfo { + WMView *destView; + WMView *xdndAwareView; + Window sourceWindow; + W_DndState *state; + Bool sourceActionChanged; + WMArray *sourceTypes; + WMArray *requiredTypes; + Bool typeListAvailable; + WMArray *dropDatas; +} W_DragDestinationInfo; + +/* -- Functions -- */ + +void W_HandleDNDClientMessage(WMView *toplevel, XClientMessageEvent *event); + +Atom W_OperationToAction(WMScreen *scr, WMDragOperationType operation); + +WMDragOperationType W_ActionToOperation(WMScreen *scr, Atom action); + +void W_FreeDragOperationItem(void* item); + +Bool W_SendDnDClientMessage(Display *dpy, Window win, Atom message, + unsigned long data1, unsigned long data2, + unsigned long data3, unsigned long data4, + unsigned long data5); + +void W_DragSourceStartTimer(WMDraggingInfo *info); + +void W_DragSourceStopTimer(void); + +void W_DragSourceStateHandler(WMDraggingInfo *info, XClientMessageEvent *event); + +void W_DragDestinationStartTimer(WMDraggingInfo *info); + +void W_DragDestinationStopTimer(void); + +void W_DragDestinationStoreEnterMsgInfo(WMDraggingInfo *info, WMView *toplevel, + XClientMessageEvent *event); + +void W_DragDestinationStorePositionMsgInfo(WMDraggingInfo *info, + WMView *toplevel, + XClientMessageEvent *event); + +void W_DragDestinationCancelDropOnEnter(WMView *toplevel, WMDraggingInfo *info); + +void W_DragDestinationStateHandler(WMDraggingInfo *info, + XClientMessageEvent *event); + +void W_DragDestinationInfoClear(WMDraggingInfo *info); + +void W_FreeViewXdndPart(WMView *view); + + +/* ---[ handlers.c ]------------------------------------------------------ */ + +Bool W_CheckIdleHandlers(void); + +void W_CheckTimerHandlers(void); + +Bool W_HandleInputEvents(Bool waitForInput, int inputfd); + + +/* ---[ notification.c ]-------------------------------------------------- */ + +void W_InitNotificationCenter(void); + +void W_FlushASAPNotificationQueue(void); + +void W_FlushIdleNotificationQueue(void); + + +/* ---[ selection.c ]----------------------------------------------------- */ + +void W_HandleSelectionEvent(XEvent *event); + + +/* ---[ wapplication.c ]-------------------------------------------------- */ + +typedef struct W_Application { + char *applicationName; + int argc; + char **argv; + char *resourcePath; +} W_Application; + +/* -- Functions -- */ + +void W_InitApplication(WMScreen *scr); + +Bool W_ApplicationInitialized(void); + + +/* ---[ wballoon.c ]------------------------------------------------------ */ + +struct W_Balloon *W_CreateBalloon(WMScreen *scr); + +void W_BalloonHandleEnterView(WMView *view); + +void W_BalloonHandleLeaveView(WMView *view); + + +/* ---[ wcolor.c ]-------------------------------------------------------- */ + +typedef struct W_Color { + struct W_Screen *screen; + + XColor color; + unsigned short alpha; + short refCount; + GC gc; + struct { + unsigned int exact:1; + } flags; +} W_Color; + +#define W_PIXEL(c) (c)->color.pixel + + +/* ---[ wevent.c ]-------------------------------------------------------- */ + +typedef struct W_EventHandler { + unsigned long eventMask; + + WMEventProc *proc; + + void *clientData; +} W_EventHandler; + +/* -- Functions -- */ + +void W_CallDestroyHandlers(W_View *view); + + +/* ---[ wfont.c ]--------------------------------------------------------- */ + +typedef struct W_Font { + struct W_Screen *screen; + + struct _XftFont *font; + + short height; + short y; + short refCount; + char *name; +} W_Font; + +#define W_FONTID(f) (f)->font->fid + + +/* ---[ widgets.c ]------------------------------------------------------- */ + +#define WC_UserWidget 128 + +#define CHECK_CLASS(widget, class) assert(W_CLASS(widget)==(class)) + +#define W_CLASS(widget) (((W_WidgetType*)(widget))->widgetClass) +#define W_VIEW(widget) (((W_WidgetType*)(widget))->view) + +/* -- Functions -- */ + +W_Class W_RegisterUserWidget(void); + + +/* ---[ winputmethod.c ]-------------------------------------------------- */ + +void W_InitIM(WMScreen *scr); + +void W_CreateIC(WMView *view); + +void W_DestroyIC(WMView *view); + +void W_FocusIC(WMView *view); + +void W_UnFocusIC(WMView *view); + +void W_SetPreeditPositon(W_View *view, int x, int y); + +int W_LookupString(W_View *view, XKeyPressedEvent *event, char *buffer, + int buflen, KeySym *keysym, Status *status); + + +/* ---[ wmisc.c ]--------------------------------------------------------- */ + +void W_DrawRelief(W_Screen *scr, Drawable d, int x, int y, unsigned int width, + unsigned int height, WMReliefType relief); + +void W_DrawReliefWithGC(W_Screen *scr, Drawable d, int x, int y, + unsigned int width, unsigned int height, + WMReliefType relief, + GC black, GC dark, GC light, GC white); + +void W_PaintTextAndImage(W_View *view, int wrap, WMColor *textColor, + W_Font *font, WMReliefType relief, const char *text, + WMAlignment alignment, W_Pixmap *image, + WMImagePosition position, WMColor *backColor, int ofs); + +void W_PaintText(W_View *view, Drawable d, WMFont *font, int x, int y, + int width, WMAlignment alignment, WMColor *color, + int wrap, const char *text, int length); + +int W_GetTextHeight(WMFont *font, const char *text, int width, int wrap); + + +/* ---[ wpixmap.c ]------------------------------------------------------- */ + +typedef struct W_Pixmap { + struct W_Screen *screen; + Pixmap pixmap; + Pixmap mask; + unsigned short width; + unsigned short height; + short depth; + short refCount; +} W_Pixmap; + + +/* ---[ wview.c ]--------------------------------------------------------- */ + typedef struct W_ViewDelegate { void *data; - void (*didMove)(struct W_ViewDelegate*, WMView*); - void (*didResize)(struct W_ViewDelegate*, WMView*); - void (*willMove)(struct W_ViewDelegate*, WMView*, int*, int*); - void (*willResize)(struct W_ViewDelegate*, WMView*, unsigned int*, unsigned int*); } W_ViewDelegate; - - typedef struct W_View { struct W_Screen *screen; @@ -416,39 +594,6 @@ typedef struct W_View { int refCount; } W_View; - -typedef struct W_EventHandler { - unsigned long eventMask; - - WMEventProc *proc; - - void *clientData; -} W_EventHandler; - - - - -typedef struct _WINGsConfiguration { - char *systemFont; - char *boldSystemFont; - int defaultFontSize; - Bool antialiasedText; - char *floppyPath; - unsigned doubleClickDelay; - unsigned mouseWheelUp; - unsigned mouseWheelDown; -} _WINGsConfiguration; - -extern _WINGsConfiguration WINGsConfiguration; - - - -#define CHECK_CLASS(widget, class) assert(W_CLASS(widget)==(class)) - - -#define W_CLASS(widget) (((W_WidgetType*)(widget))->widgetClass) -#define W_VIEW(widget) (((W_WidgetType*)(widget))->view) - #define W_VIEW_REALIZED(view) (view)->flags.realized #define W_VIEW_MAPPED(view) (view)->flags.mapped @@ -459,14 +604,7 @@ extern _WINGsConfiguration WINGsConfiguration; #define W_VIEW_WIDTH(view) (view)->size.width #define W_VIEW_HEIGHT(view) (view)->size.height - -#define W_PIXEL(c) (c)->color.pixel - -#define W_FONTID(f) (f)->font->fid - -#define W_DRAWABLE(scr) (scr)->rcontext->drawable - - +/* -- Functions -- */ W_View *W_GetViewForXWindow(Display *display, Window window); @@ -476,20 +614,20 @@ W_View *W_CreateTopView(W_Screen *screen); W_View *W_CreateUnmanagedTopView(W_Screen *screen); - W_View *W_CreateRootView(W_Screen *screen); void W_DestroyView(W_View *view); void W_RealizeView(W_View *view); +void W_RedisplayView(WMView *view); + void W_ReparentView(W_View *view, W_View *newParent, int x, int y); void W_RaiseView(W_View *view); void W_LowerView(W_View *view); - void W_MapView(W_View *view); void W_MapSubviews(W_View *view); @@ -500,6 +638,10 @@ W_View *W_TopLevelOfView(W_View *view); void W_UnmapView(W_View *view); +WMView *W_RetainView(WMView *view); + +void W_ReleaseView(WMView *view); + void W_MoveView(W_View *view, int x, int y); void W_ResizeView(W_View *view, unsigned int width, unsigned int height); @@ -508,132 +650,17 @@ void W_SetViewBackgroundColor(W_View *view, WMColor *color); void W_SetViewCursor(W_View *view, Cursor cursor); -void W_DrawRelief(W_Screen *scr, Drawable d, int x, int y, unsigned int width, - unsigned int height, WMReliefType relief); - -void W_DrawReliefWithGC(W_Screen *scr, Drawable d, int x, int y, - unsigned int width, unsigned int height, - WMReliefType relief, - GC black, GC dark, GC light, GC white); - -void W_CallDestroyHandlers(W_View *view); - -void W_PaintTextAndImage(W_View *view, int wrap, WMColor *textColor, - W_Font *font, WMReliefType relief, const char *text, - WMAlignment alignment, W_Pixmap *image, - WMImagePosition position, WMColor *backColor, int ofs); - -void W_PaintText(W_View *view, Drawable d, WMFont *font, int x, int y, - int width, WMAlignment alignment, WMColor *color, - int wrap, const char *text, int length); - -int W_GetTextHeight(WMFont *font, const char *text, int width, int wrap); - - -int W_TextWidth(WMFont *font, const char *text, int length); +void W_SetFocusOfTopLevel(W_View *toplevel, W_View *view); +W_View *W_FocusedViewOfToplevel(W_View *view); void W_BroadcastMessage(W_View *targetParent, XEvent *event); void W_DispatchMessage(W_View *target, XEvent *event); -void W_SetFocusOfToplevel(W_View *toplevel, W_View *view); - -W_View *W_FocusedViewOfToplevel(W_View *view); - -void W_SetFocusOfTopLevel(W_View *toplevel, W_View *view); - -void W_ReleaseView(WMView *view); - -WMView *W_RetainView(WMView *view); - -void W_InitApplication(WMScreen *scr); - -void W_InitNotificationCenter(void); - -W_Class W_RegisterUserWidget(void); - -void W_RedisplayView(WMView *view); - -Bool W_ApplicationInitialized(void); - -void W_HandleSelectionEvent(XEvent *event); - -void W_HandleDNDClientMessage(WMView *toplevel, XClientMessageEvent *event); - -void W_FlushASAPNotificationQueue(void); - -void W_FlushIdleNotificationQueue(void); - -struct W_Balloon *W_CreateBalloon(WMScreen *scr); - -void W_BalloonHandleEnterView(WMView *view); - -void W_BalloonHandleLeaveView(WMView *view); - -Bool W_CheckIdleHandlers(void); - -void W_CheckTimerHandlers(void); - -Bool W_HandleInputEvents(Bool waitForInput, int inputfd); - -/* XDnD */ -Atom W_OperationToAction(WMScreen *scr, WMDragOperationType operation); - -WMDragOperationType W_ActionToOperation(WMScreen *scr, Atom action); - -void W_FreeDragOperationItem(void* item); - -Bool W_SendDnDClientMessage(Display *dpy, Window win, Atom message, - unsigned long data1, unsigned long data2, - unsigned long data3, unsigned long data4, - unsigned long data5); - -void W_DragSourceStartTimer(WMDraggingInfo *info); - -void W_DragSourceStopTimer(void); - -void W_DragSourceStateHandler(WMDraggingInfo *info, XClientMessageEvent *event); - -void W_DragDestinationStartTimer(WMDraggingInfo *info); - -void W_DragDestinationStopTimer(void); - -void W_DragDestinationStoreEnterMsgInfo(WMDraggingInfo *info, WMView *toplevel, - XClientMessageEvent *event); - -void W_DragDestinationStorePositionMsgInfo(WMDraggingInfo *info, - WMView *toplevel, - XClientMessageEvent *event); - -void W_DragDestinationCancelDropOnEnter(WMView *toplevel, WMDraggingInfo *info); - -void W_DragDestinationStateHandler(WMDraggingInfo *info, - XClientMessageEvent *event); - -void W_DragDestinationInfoClear(WMDraggingInfo *info); - -void W_FreeViewXdndPart(WMView *view); - -/* XIM */ -void W_InitIM(WMScreen *scr); - -void W_CreateIC(WMView *view); - -void W_DestroyIC(WMView *view); - -void W_FocusIC(WMView *view); - -void W_UnFocusIC(WMView *view); - -void W_SetPreeditPositon(W_View *view, int x, int y); - -int W_LookupString(W_View *view, XKeyPressedEvent *event, char *buffer, - int buflen, KeySym *keysym, Status *status); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _WINGSP_H_ */ -