示例#1
0
static void DrawFrame( GtkWidget *widget, int x, int y, int w, int h )
{
    int org_x = 0;
    int org_y = 0;
    gdk_window_get_origin( widget->window, &org_x, &org_y );
    x += org_x;
    y += org_y;

    GdkGC *gc = gdk_gc_new( GDK_ROOT_PARENT() );
    gdk_gc_set_subwindow( gc, GDK_INCLUDE_INFERIORS );
    gdk_gc_set_function( gc, GDK_INVERT );

    gdk_draw_rectangle( GDK_ROOT_PARENT(), gc, FALSE, x, y, w, h );
    gdk_gc_unref( gc );
}
// this function will make sure that everything has been initialized.
nsresult
nsScreenManagerGtk :: EnsureInit()
{
  if (mCachedScreenArray.Count() > 0)
    return NS_OK;

#if GTK_CHECK_VERSION(2,2,0)
  mRootWindow = gdk_get_default_root_window();
#else
  mRootWindow = GDK_ROOT_PARENT();
#endif // GTK_CHECK_VERSION(2,2,0)
  g_object_ref(mRootWindow);

  // GDK_STRUCTURE_MASK ==> StructureNotifyMask, for ConfigureNotify
  // GDK_PROPERTY_CHANGE_MASK ==> PropertyChangeMask, for PropertyNotify
  gdk_window_set_events(mRootWindow,
                        GdkEventMask(gdk_window_get_events(mRootWindow) |
                                     GDK_STRUCTURE_MASK |
                                     GDK_PROPERTY_CHANGE_MASK));
  gdk_window_add_filter(mRootWindow, root_window_event_filter, this);
#ifdef MOZ_X11
  mNetWorkareaAtom =
    XInternAtom(GDK_WINDOW_XDISPLAY(mRootWindow), "_NET_WORKAREA", False);
#endif

  return Init();
}
示例#3
0
int
main (int argc, char *argv[])
{

#ifdef ENABLE_NLS
  bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
  textdomain (PACKAGE);
#endif

  gtk_set_locale ();
  gtk_init (&argc, &argv);

  add_pixmap_directory (PACKAGE_DATA_DIR "/pixmaps");
  add_pixmap_directory (PACKAGE_SOURCE_DIR "/pixmaps");

   e = evas_new();
   evas_set_output_method(e, RENDER_METHOD_ALPHA_SOFTWARE);
   {
     Visual *vis;
     Colormap cmap;
   
     vis = evas_get_optimal_visual(e, GDK_WINDOW_XDISPLAY(GDK_ROOT_PARENT()));
     gdk_vis = gdkx_visual_get(XVisualIDFromVisual(vis));
     cmap = evas_get_optimal_colormap(e, GDK_WINDOW_XDISPLAY(GDK_ROOT_PARENT()));
     gdk_cmap = gdkx_colormap_get(cmap);
     /* workaround for bug in gdk - well oversight in api */
     ((GdkColormapPrivate *)gdk_cmap)->visual = gdk_vis;
   }

  /*
   * The following code was added by Glade to create one of each component
   * (except popup menus), just so that you see something after building
   * the project. Delete any components that you don't want shown initially.
   */
  mainwin = create_mainwin ();
  gtk_widget_show (mainwin);

  gtk_main ();
  return 0;
}
示例#4
0
EggTrayIcon *
egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
{
    EggTrayIcon *icon;
    char buffer[256];
    GdkWindow *root_window;

    g_return_val_if_fail (xscreen != NULL, NULL);

    icon = (EggTrayIcon*)gtk_object_new (EGG_TYPE_TRAY_ICON, NULL);
    gtk_window_set_title (GTK_WINDOW (icon), name);

#if HAVE_GTK_MULTIHEAD
    gtk_plug_construct_for_display (GTK_PLUG_XEMBED (icon),
                                    gdk_screen_get_display (screen), 0);
#else
    gtk_plug_xembed_construct (GTK_PLUG_XEMBED (icon), 0);
#endif

    gtk_widget_realize (GTK_WIDGET (icon));

    /* Now see if there's a manager window around */
    g_snprintf (buffer, sizeof (buffer),
                "_NET_SYSTEM_TRAY_S%d",
                XScreenNumberOfScreen (xscreen));

    icon->selection_atom = XInternAtom (DisplayOfScreen (xscreen),
                                        buffer, False);

    icon->manager_atom = XInternAtom (DisplayOfScreen (xscreen),
                                      "MANAGER", False);

    icon->system_tray_opcode_atom = XInternAtom (DisplayOfScreen (xscreen),
                                    "_NET_SYSTEM_TRAY_OPCODE", False);

    egg_tray_icon_update_manager_window (icon);

#if HAVE_GTK_MULTIHEAD
    root_window = gdk_screen_get_root_window (screen);
#else
    root_window = GDK_ROOT_PARENT(); /* gdk_window_lookup (gdk_x11_get_default_root_xwindow ()); */
#endif

    /* Add a root window filter so that we get changes on MANAGER */
    gdk_window_add_filter (root_window,
                           egg_tray_icon_manager_filter, icon);

    return icon;
}
示例#5
0
void
nsCairoScreen::Init ()
{
#ifdef MOZ_ENABLE_GTK2
    mAvailRect = mRect = nsRect(0, 0, gdk_screen_width(), gdk_screen_height());
    // We need to account for the taskbar, etc in the available rect.
    // See http://freedesktop.org/Standards/wm-spec/index.html#id2767771

    // XXX It doesn't change that often, but we should probably
    // listen for changes to _NET_WORKAREA.
    // XXX do we care about _NET_WM_STRUT_PARTIAL?  That will
    // add much more complexity to the code here (our screen
    // could have a non-rectangular shape), but should
    // lead to greater accuracy.

#if GTK_CHECK_VERSION(2,2,0)
    GdkWindow *root_window = gdk_get_default_root_window();
#else
    GdkWindow *root_window = GDK_ROOT_PARENT();
#endif // GTK_CHECK_VERSION(2,2,0)

    long *workareas;
    GdkAtom type_returned;
    int format_returned;
    int length_returned;

#if GTK_CHECK_VERSION(2,0,0)
    GdkAtom cardinal_atom = gdk_x11_xatom_to_atom(XA_CARDINAL);
#else
    GdkAtom cardinal_atom = (GdkAtom) XA_CARDINAL;
#endif

    gdk_error_trap_push();

    // gdk_property_get uses (length + 3) / 4, hence G_MAXLONG - 3 here.
    if (!gdk_property_get(root_window,
                          gdk_atom_intern ("_NET_WORKAREA", FALSE),
                          cardinal_atom,
                          0, G_MAXLONG - 3, FALSE,
                          &type_returned,
                          &format_returned,
                          &length_returned,
                          (guchar **) &workareas)) {
        // This window manager doesn't support the freedesktop standard.
        // Nothing we can do about it, so assume full screen size.
        return;
    }

    // Flush the X queue to catch errors now.
    gdk_flush();

    if (!gdk_error_trap_pop() &&
        type_returned == cardinal_atom &&
        length_returned && (length_returned % 4) == 0 &&
        format_returned == 32) {
        int num_items = length_returned / sizeof(long);

        for (int i = 0; i < num_items; i += 4) {
            nsRect workarea(workareas[i],     workareas[i + 1],
                            workareas[i + 2], workareas[i + 3]);
            if (!mRect.Contains(workarea)) {
                NS_WARNING("Invalid bounds");
                continue;
            }

            mAvailRect.IntersectRect(mAvailRect, workarea);
        }
    }

#elif MOZ_ENABLE_XLIB
    mScreenNum = 0;
    mRect.x = mAvailRect.x = 0;
    mRect.y = mAvailRect.y = 0;
    mRect.width = mAvailRect.width = 1600;
    mRect.height = mAvailRect.height = 1200;
#endif
}
示例#6
0
文件: fe-gtk.c 项目: UIKit0/picogui
int
fe_args (int argc, char *argv[])
{
#ifdef USE_GNOME
    struct poptOption options[] = {
        {"cfgdir", 'd', POPT_ARG_STRING, 0, 0, _("Config dir"), 0},
        {"noauto", 'a', POPT_ARG_NONE, 0, 0, _("Don't Auto connect"), 0},
#ifdef USE_PANEL
        {"no-panel", 'n', POPT_ARG_NONE, 0, 0, _("Don't use GNOME Panel"), 0},
#endif
        POPT_AUTOHELP {0, '\0', 0, 0}
    };
#endif

    if (argc > 1)
    {
        if (!strcasecmp (argv[1], "-a") || !strcasecmp (argv[1], "--noauto"))
        {
            auto_connect = 0;
        }
#ifdef USE_PANEL
        if (!strcasecmp (argv[1], "-n") || !strcasecmp (argv[1], "--no-panel"))
        {
            nopanel = TRUE;
        }
#endif
        if (!strcasecmp (argv[1], "-v") || !strcasecmp (argv[1], "--version"))
        {
            printf (PACKAGE" "VERSION"\n");
            return 0;
        }
#ifndef USE_GNOME
#ifdef ENABLE_NLS
        bindtextdomain (PACKAGE, PREFIX"/share/locale");
        textdomain (PACKAGE);
#endif
        if (!strcasecmp (argv[1], "-h") || !strcasecmp (argv[1], "--help"))
        {
            printf(_("%s %s Options:\n\n"
                     "   --cfgdir <dir> -d\t : use a different config dir\n"
                     "   --noauto       -a\t : don't auto connect\n"
                     "   --version      -v\t : show version information\n"
                    ), PACKAGE, VERSION);
            return 0;
        }
#endif
    }
#ifdef ENABLE_NLS
#ifdef USE_GNOME
    bindtextdomain (PACKAGE, PREFIX"/share/locale");
    textdomain (PACKAGE);
#endif
#endif

    if (argc > 2)
    {
        if (!strcasecmp (argv[1], "-d") || !strcasecmp (argv[1], "--cfgdir"))
        {
            xdir = strdup (argv[2]);
            if (xdir[strlen (xdir) - 1] == '/')
                xdir[strlen (xdir) - 1] = 0;
        }
    }

#ifndef USE_GNOME
    gtk_set_locale ();
#endif

#ifdef USE_PANEL
    if (nopanel)
        gnome_init_with_popt_table (argv[0], VERSION, argc, argv, options, 0, 0);
    else {
        CORBA_Environment ev;
        CORBA_exception_init (&ev);

        gnome_CORBA_init_with_popt_table (argv[0], VERSION,
                                          &argc, argv, options, 0, 0,
                                          GNORBA_INIT_SERVER_FUNC, &ev);
        CORBA_exception_free (&ev);
    }
#else
#ifdef USE_GNOME
    gnome_init_with_popt_table (argv[0], VERSION, argc, argv, options, 0, 0);
#else
    gtk_init (&argc, &argv);
#endif
#endif

#ifndef USE_GNOME
#ifdef USE_GDK_PIXBUF
    gdk_rgb_init();
#endif
#endif

#ifdef USE_XLIB
    proxy_invisible = gtk_invisible_new ();
    gtk_widget_show (proxy_invisible);

    /* Make the root window send events to the invisible proxy widget */
    gdk_window_set_user_data (GDK_ROOT_PARENT (), proxy_invisible);

    /* Select for PropertyNotify events from the root window */
    XSelectInput (GDK_DISPLAY (), GDK_ROOT_WINDOW (), PropertyChangeMask);

    gtk_signal_connect (GTK_OBJECT (proxy_invisible), "property-notify-event",
                        GTK_SIGNAL_FUNC (handle_property_notify), NULL);
#endif

    return 1;
}
示例#7
0
static void XF86AudioKeyGrab_init()
{
	gdk_window_add_filter(GDK_ROOT_PARENT(), xf86audio_filter, map);
	grab_keys();
}