⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdkwindow.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 5 页
字号:
  if (x)    *x = winx;  if (y)    *y = winy;  if (mask)    *mask = xmask;    return return_val;}GdkWindow*gdk_window_at_pointer (gint *win_x,		       gint *win_y){  GdkWindowPrivate *private;  GdkWindow *window;  Window root;  Window xwindow;  Window xwindow_last = 0;  int rootx = -1, rooty = -1;  int winx, winy;  unsigned int xmask;    private = &gdk_root_parent;    xwindow = private->xwindow;    XGrabServer (private->xdisplay);  while (xwindow)    {      xwindow_last = xwindow;      XQueryPointer (private->xdisplay,		     xwindow,		     &root, &xwindow,		     &rootx, &rooty,		     &winx, &winy,		     &xmask);    }  XUngrabServer (private->xdisplay);    window = gdk_window_lookup (xwindow_last);    if (win_x)    *win_x = window ? winx : -1;  if (win_y)    *win_y = window ? winy : -1;    return window;}GdkWindow*gdk_window_get_parent (GdkWindow *window){  g_return_val_if_fail (window != NULL, NULL);    return ((GdkWindowPrivate*) window)->parent;}GdkWindow*gdk_window_get_toplevel (GdkWindow *window){  GdkWindowPrivate *private;    g_return_val_if_fail (window != NULL, NULL);    private = (GdkWindowPrivate*) window;    while (private->window_type == GDK_WINDOW_CHILD)    {      window = ((GdkWindowPrivate*) window)->parent;      private = (GdkWindowPrivate*) window;    }    return window;}GList*gdk_window_get_children (GdkWindow *window){  GdkWindowPrivate *private;  GdkWindow *child;  GList *children;  Window root;  Window parent;  Window *xchildren;  unsigned int nchildren;  unsigned int i;    g_return_val_if_fail (window != NULL, NULL);    private = (GdkWindowPrivate*) window;  if (private->destroyed)    return NULL;    XQueryTree (private->xdisplay, private->xwindow,	      &root, &parent, &xchildren, &nchildren);    children = NULL;    if (nchildren > 0)    {      for (i = 0; i < nchildren; i++)	{	  child = gdk_window_lookup (xchildren[i]);          if (child)            children = g_list_prepend (children, child);	}            if (xchildren)	XFree (xchildren);    }    return children;}GdkEventMask  gdk_window_get_events (GdkWindow *window){  GdkWindowPrivate *private;  XWindowAttributes attrs;  GdkEventMask event_mask;  int i;    g_return_val_if_fail (window != NULL, 0);    private = (GdkWindowPrivate*) window;  if (private->destroyed)    return 0;    XGetWindowAttributes (gdk_display, private->xwindow, 			&attrs);    event_mask = 0;  for (i = 0; i < gdk_nevent_masks; i++)    {      if (attrs.your_event_mask & gdk_event_mask_table[i])	event_mask |= 1 << (i + 1);    }    return event_mask;}void          gdk_window_set_events (GdkWindow       *window,		       GdkEventMask     event_mask){  GdkWindowPrivate *private;  long xevent_mask;  int i;    g_return_if_fail (window != NULL);    private = (GdkWindowPrivate*) window;  if (private->destroyed)    return;    xevent_mask = StructureNotifyMask;  for (i = 0; i < gdk_nevent_masks; i++)    {      if (event_mask & (1 << (i + 1)))	xevent_mask |= gdk_event_mask_table[i];    }    XSelectInput (gdk_display, private->xwindow, 		xevent_mask);}voidgdk_window_add_colormap_windows (GdkWindow *window){  GdkWindow *toplevel;  GdkWindowPrivate *toplevel_private;  GdkWindowPrivate *window_private;  Window *old_windows;  Window *new_windows;  int i, count;    g_return_if_fail (window != NULL);    toplevel = gdk_window_get_toplevel (window);  toplevel_private = (GdkWindowPrivate*) toplevel;  window_private = (GdkWindowPrivate*) window;  if (window_private->destroyed)    return;    old_windows = NULL;  if (!XGetWMColormapWindows (toplevel_private->xdisplay,			      toplevel_private->xwindow,			      &old_windows, &count))    {      count = 0;    }    for (i = 0; i < count; i++)    if (old_windows[i] == window_private->xwindow)      {	XFree (old_windows);	return;      }    new_windows = g_new (Window, count + 1);    for (i = 0; i < count; i++)    new_windows[i] = old_windows[i];  new_windows[count] = window_private->xwindow;    XSetWMColormapWindows (toplevel_private->xdisplay,			 toplevel_private->xwindow,			 new_windows, count + 1);    g_free (new_windows);  if (old_windows)    XFree (old_windows);}static gbooleangdk_window_have_shape_ext (void){  enum { UNKNOWN, NO, YES };  static gint have_shape = UNKNOWN;    if (have_shape == UNKNOWN)    {      int ignore;      if (XQueryExtension (gdk_display, "SHAPE", &ignore, &ignore, &ignore))	have_shape = YES;      else	have_shape = NO;    }    return (have_shape == YES);}/* * This needs the X11 shape extension. * If not available, shaped windows will look * ugly, but programs still work.    Stefan Wille */voidgdk_window_shape_combine_mask (GdkWindow *window,			       GdkBitmap *mask,			       gint x, gint y){  GdkWindowPrivate *window_private;  Pixmap pixmap;    g_return_if_fail (window != NULL);  #ifdef HAVE_SHAPE_EXT  window_private = (GdkWindowPrivate*) window;  if (window_private->destroyed)    return;    if (gdk_window_have_shape_ext ())    {      if (mask)	{	  GdkWindowPrivate *pixmap_private;	  	  pixmap_private = (GdkWindowPrivate*) mask;	  pixmap = (Pixmap) pixmap_private->xwindow;	}      else	{	  x = 0;	  y = 0;	  pixmap = None;	}            XShapeCombineMask (window_private->xdisplay,			 window_private->xwindow,			 ShapeBounding,			 x, y,			 pixmap,			 ShapeSet);    }#endif /* HAVE_SHAPE_EXT */}void          gdk_window_add_filter (GdkWindow     *window,		       GdkFilterFunc  function,		       gpointer       data){  GdkWindowPrivate *private;  GList *tmp_list;  GdkEventFilter *filter;    private = (GdkWindowPrivate*) window;  if (private && private->destroyed)    return;    if (private)    tmp_list = private->filters;  else    tmp_list = gdk_default_filters;    while (tmp_list)    {      filter = (GdkEventFilter *)tmp_list->data;      if ((filter->function == function) && (filter->data == data))	return;      tmp_list = tmp_list->next;    }    filter = g_new (GdkEventFilter, 1);  filter->function = function;  filter->data = data;    if (private)    private->filters = g_list_append (private->filters, filter);  else    gdk_default_filters = g_list_append (gdk_default_filters, filter);}voidgdk_window_remove_filter (GdkWindow     *window,			  GdkFilterFunc  function,			  gpointer       data){  GdkWindowPrivate *private;  GList *tmp_list, *node;  GdkEventFilter *filter;    private = (GdkWindowPrivate*) window;    if (private)    tmp_list = private->filters;  else    tmp_list = gdk_default_filters;    while (tmp_list)    {      filter = (GdkEventFilter *)tmp_list->data;      node = tmp_list;      tmp_list = tmp_list->next;            if ((filter->function == function) && (filter->data == data))	{	  if (private)	    private->filters = g_list_remove_link (private->filters, node);	  else	    gdk_default_filters = g_list_remove_link (gdk_default_filters, node);	  g_list_free_1 (node);	  g_free (filter);	  	  return;	}    }}voidgdk_window_set_override_redirect (GdkWindow *window,				  gboolean override_redirect){  GdkWindowPrivate *private;  XSetWindowAttributes attr;    g_return_if_fail (window != NULL);  private = (GdkWindowPrivate*) window;  if (private->destroyed)    return;    attr.override_redirect = (override_redirect == FALSE)?False:True;  XChangeWindowAttributes (gdk_display,			   ((GdkWindowPrivate *)window)->xwindow,			   CWOverrideRedirect,			   &attr);}void          gdk_window_set_icon (GdkWindow *window, 		     GdkWindow *icon_window,		     GdkPixmap *pixmap,		     GdkBitmap *mask){  XWMHints *wm_hints;  GdkWindowPrivate *window_private;  GdkWindowPrivate *private;    g_return_if_fail (window != NULL);  window_private = (GdkWindowPrivate*) window;  if (window_private->destroyed)    return;  wm_hints = XGetWMHints (window_private->xdisplay, window_private->xwindow);  if (!wm_hints)    wm_hints = XAllocWMHints ();  if (icon_window != NULL)    {      private = (GdkWindowPrivate *)icon_window;      wm_hints->flags |= IconWindowHint;      wm_hints->icon_window = private->xwindow;    }    if (pixmap != NULL)    {      private = (GdkWindowPrivate *)pixmap;      wm_hints->flags |= IconPixmapHint;      wm_hints->icon_pixmap = private->xwindow;    }    if (mask != NULL)    {      private = (GdkWindowPrivate *)mask;      wm_hints->flags |= IconMaskHint;      wm_hints->icon_mask = private->xwindow;    }  XSetWMHints (window_private->xdisplay, window_private->xwindow, wm_hints);  XFree (wm_hints);}void          gdk_window_set_icon_name (GdkWindow *window, 			  gchar *    name){  GdkWindowPrivate *window_private;  XTextProperty property;  gint res;    g_return_if_fail (window != NULL);  window_private = (GdkWindowPrivate*) window;  if (window_private->destroyed)    return;  res = XmbTextListToTextProperty (window_private->xdisplay,				   &name, 1, XStdICCTextStyle,                               	   &property);  if (res < 0)    {      g_warning ("Error converting icon name to text property: %d\n", res);      return;    }    XSetWMIconName (window_private->xdisplay, window_private->xwindow,		  &property);    if (property.value)    XFree (property.value);}void          gdk_window_set_group (GdkWindow *window, 		      GdkWindow *leader){  XWMHints *wm_hints;  GdkWindowPrivate *window_private;  GdkWindowPrivate *private;    g_return_if_fail (window != NULL);  g_return_if_fail (leader != NULL);  window_private = (GdkWindowPrivate*) window;  if (window_private->destroyed)    return;    private = (GdkWindowPrivate *)leader;  wm_hints = XGetWMHints (window_private->xdisplay, window_private->xwindow);  if (!wm_hints)    wm_hints = XAllocWMHints ();  wm_hints->flags |= WindowGroupHint;  wm_hints->window_group = private->xwindow;  XSetWMHints (window_private->xdisplay, window_private->xwindow, wm_hints);  XFree (wm_hints);}static voidgdk_window_set_mwm_hints (GdkWindow *window,			  MotifWmHints *new_hints){  static Atom hints_atom = None;  MotifWmHints *hints;  Atom type;  gint format;  gulong nitems;  gulong bytes_after;    GdkWindowPrivate *window_private;    g_return_if_fail (window != NULL);  window_private = (GdkWindowPrivate*) window;  if (window_private->destroyed)    return;    if (!hints_atom)    hints_atom = XInternAtom (window_private->xdisplay, 			      _XA_MOTIF_WM_HINTS, FALSE);    XGetWindowProperty (window_private->xdisplay, window_private->xwindow,		      hints_atom, 0, sizeof (MotifWmHints)/sizeof (long),		      False, AnyPropertyType, &type, &format, &nitems,		      &bytes_after, (guchar **)&hints);    if (type == None)    hints = new_hints;  else    {      if (new_hints->flags & MWM_HINTS_FUNCTIONS)	{	  hints->flags |= MWM_HINTS_FUNCTIONS;	  hints->functions = new_hints->functions;	}      if (new_hints->flags & MWM_HINTS_DECORATIONS)	{	  hints->flags |= MWM_HINTS_DECORATIONS;	  hints->decorations = new_hints->decorations;	}    }    XChangeProperty (window_private->xdisplay, window_private->xwindow,		   hints_atom, hints_atom, 32, PropModeReplace,		   (guchar *)hints, sizeof (MotifWmHints)/sizeof (long));    if (hints != new_hints)    XFree (hints);}voidgdk_window_set_decorations (GdkWindow      *window,			    GdkWMDecoration decorations){  MotifWmHints hints;    hints.flags = MWM_HINTS_DECORATIONS;  hints.decorations = decorations;    gdk_window_set_mwm_hints (window, &hints);}voidgdk_window_set_functions (GdkWindow    *window,			  GdkWMFunction functions){  MotifWmHints hints;    hints.flags = MWM_HINTS_FUNCTIONS;  hints.functions = functions;    gdk_window_set_mwm_hints (window, &hints);}GList *gdk_window_get_toplevels (void){  GList *new_list = NULL;  GList *tmp_list;    tmp_list = gdk_root_parent.children;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -