From miguel@nuclecu.unam.mx Thu May 11 19:23:31 2000
Received: (qmail 26636 invoked from network); 16 Aug 1997 03:21:47 -0000
Received: from athena.nuclecu.unam.mx (132.248.29.9)
by mail2.redhat.com with SMTP; 16 Aug 1997 03:21:47 -0000
Received: (from miguel@localhost)
by athena.nuclecu.unam.mx (8.8.5/8.8.5) id WAA32598;
Fri, 15 Aug 1997 22:19:34 -0500
Date: Fri, 15 Aug 1997 22:19:34 -0500
Message-Id: <199708160319.WAA32598@athena.nuclecu.unam.mx>
From: Miguel de Icaza < miguel@nuclecu.unam.mx>
To: gtk-list@redhat.com, kde@fiwi02.wiwi.uni-tuebingen.de, guile@cygnus.com
Reply-To: gnome@nuclecu.unam.mx
Subject: The GNOME Desktop project.
The GNOME Desktop project
(GNU Network Object Model Environment)
http://bananoid.nuclecu.unam.mx/gnome
* Goals
We want to develop a free and complete set of user friendly
applications and desktop tools, similar to CDE and KDE but based
entirely on free software:
- We want the applications to have a common look and feel, and
to share as many visual elements and UI concepts as possible.
- We want to use the GTK toolkit as our toolkit for writing
the applications.
The GTK toolkit (http://www.cs.umn.edu/~amundson/gtk and
http://levien.com/~slow/gtk/) is the toolkit written by
Peter Mattis, Spencer Kimball, Josh MacDonald, for the GNU
Image Manipulation Program (GIMP) project
(http://scam.xcf.berkeley.edu/~gimp).
- We want to encourage people to contribute code and to test
the code, so that the software will compile out of the box
by using GNU's tools for automatic source configuration.
- We plan to export the GTK API through a procedural database
(which will in fact be an object database) to allow easy
integration with scripting languages and modules written in
other languages.
- We plan to use GTK/Scheme bindings for coding small
utilities and applications. When these bindings are more
mature, it should be possible to write complete applications
in Scheme.
* Some common questions regarding the project
Why don't you just use/contribute to KDE?
KDE is a nice project; they have good hackers working on it and
they have done a very good job. Unfortunately, they selected the
non-free Qt toolkit as the foundation for the project, which poses
legal problems for those desiring to redistribute the software.
Why not write a free Qt replacement instead?
The KDE project -in its current form- has about 89,000 lines of
code, on the other hand, the source code for the Qt library has
about 91,000 lines.
Qt also forces the programmer to write his code in C++ or Python.
Gtk can be used in C, Scheme, Python, C++, Objective-C and Perl.
Also, we believe that KDE has some design problems (they have lots
of good ideas though) that we plan to fix.
Under what license does the GNOME fall?
As most GNU software, GNOME application code will be released
under the GNU GPL. GNOME specific libraries will be released
under the terms of the GNU LGPL.
Will you rewrite everything from scratch?
No. We will try to reuse the existing code for GNU programs as
much as possible, while adhering to the guidelines of the project.
Putting nice and consistent user interfaces over all-time
favorites will be one of the projects.
We plan on reusing code from KDE as well.
* Joining the GNOME mailing list:
We have created a mailing list for people interested in discussing
the development of this project. To subscribe, use this command:
echo 'subscribe gnome' | mail majordomo@nuclecu.unam.mx
From federico@nuclecu.unam.mx
Received: (qmail 8555 invoked from network); 27 Oct 1997 20:47:51 -0000
Received: from sphinx.nuclecu.unam.mx (132.248.29.8)
by mail2.redhat.com with SMTP; 27 Oct 1997 20:47:51 -0000
Received: (from federico@localhost) by sphinx.nuclecu.unam.mx
(8.6.12/8.6.11) id OAA14073; Mon, 27 Oct 1997 14:47:37 -0600
Date: Mon, 27 Oct 1997 14:47:37 -0600
Message-Id: <199710272047.OAA14073@sphinx.nuclecu.unam.mx>
From: Federico Mena <federico@nuclecu.unam.mx>
To: gtk-list@redhat.com
Subject: Problem in the Gnome panel
Reply-to: federico@nuclecu.unam.mx
Hello, all
I am having some problems with widget allocations in the Gnome panel.
The way the panel works is more or less like this:
- The panel's main window and GtkFixed containers are created.
- Applet modules are intialized.
- The panel reads the user configuration file. From there it
decides which applets to launch (i.e. create instances of).
- When an applet is asked to create an instance of itself, the
applet module creates the applet's widget and asks the panel
to add that widget as an applet.
- The panel is responsible for positioning the applet in a
place where it will not overlap other applets.
- When all initialization is done, gtk_main() is called.
I am using a simple first-fit algorithm to find a suitable position
for the applets. I need to query the position of the already-inserted
applets (by looking at their allocation field). The problem is that
the applets may not have an allocation at the time I need to look at
it.
This is the code that registers an applet on the panel. I would be
grateful if anyone has any suggestions about how to query the applets
about their position/size.
Quartic
----------------------------------------------------------------------
static void
sort_applet_by_pos(GtkWidget *applet, gpointer data)
{
GList **list;
GtkWidget *w;
int pos;
list = data;
pos = 0;
while (*list) {
w = (*list)->data;
if (applet->allocation.x < w->allocation.x)
break;
pos++;
*list = (*list)->next;
}
*list = g_list_insert(*list, applet, pos);
}
static void
fix_applet_position(GtkWidget *applet, int *xpos, int *ypos)
{
GList *applets;
GtkWidget *w;
GtkRequisition requisition;
int req_width;
int found;
int x;
int size;
int largest;
int x_for_largest;
/* FIXME!!! This is not working at all --- the widgets have
* no allocation when I need them to :-(
*/
/* FIXME: This routine currently only handles the horizontal case of the panel */
if ((*xpos != PANEL_UNKNOWN_APPLET_POSITION) &&
(*ypos != PANEL_UNKNOWN_APPLET_POSITION))
return;
*ypos = 0;
applets = NULL;
gtk_container_foreach(GTK_CONTAINER(the_panel->fixed),
sort_applet_by_pos,
&applets);
gtk_widget_size_request(applet, &requisition);
req_width = requisition.width;
/* Find first fit */
found = FALSE;
x = 0;
largest = 0;
x_for_largest = 0;
for (; applets; applets = applets->next) {
w = applets->data;
size = w->allocation.x - x;
if (size >= req_width) {
found = TRUE;
break;
}
if (size > largest) {
largest = size;
x_for_largest = x;
}
x = w->allocation.x + w->allocation.width;
}
if (found)
*xpos = x;
else {
size = gdk_screen_width() - x;
if (size >= req_width)
*xpos = x;
else
*xpos = x_for_largest;
}
g_list_free(applets);
}
static void
register_toy(GtkWidget *applet, char *id, int xpos, int ypos, long flags)
{
GtkWidget *eventbox;
g_assert(applet != NULL);
g_assert(id != NULL);
/* We wrap the applet in a GtkEventBox so that we can capture events over it */
eventbox = gtk_event_box_new();
gtk_container_add(GTK_CONTAINER(eventbox), applet);
gtk_widget_set_events(eventbox, gtk_widget_get_events(eventbox) |
APPLET_EVENT_MASK);
gtk_signal_connect(GTK_OBJECT(eventbox), "event", (GtkSignalFunc)
panel_applet_event, NULL);
bind_applet_events(applet, NULL);
/* Attach our private data to the applet */
gtk_object_set_data(GTK_OBJECT(eventbox),
APPLET_CMD_FUNC, get_applet_cmd_func(id));
gtk_object_set_data(GTK_OBJECT(eventbox),
APPLET_FLAGS, (gpointer) flags);
fix_applet_position(eventbox, &xpos, &ypos);
gtk_fixed_put(GTK_FIXED(the_panel->fixed), eventbox, xpos, ypos);
gtk_widget_show(eventbox);
gtk_widget_show(applet);
}
----------------------------------------------------------------------
From miguel@nuclecu.unam.mx
Received: (qmail 4701 invoked from network); 23 Dec 1997 04:57:00 -0000
Received: from athena.nuclecu.unam.mx (132.248.29.9)
by mail2.redhat.com with SMTP; 23 Dec 1997 04:57:00 -0000
Received: (from miguel@localhost)
by athena.nuclecu.unam.mx (8.8.7/8.8.7) id WAA06955;
Mon, 22 Dec 1997 22:55:17 -0600
Date: Mon, 22 Dec 1997 22:55:17 -0600
Message-Id: <199712230455.WAA06955@athena.nuclecu.unam.mx>
From: Miguel de Icaza <miguel@nuclecu.unam.mx>
To: gnome@athena.nuclecu.unam.mx
CC: ripley@xs4all.nl, gtk-list@redhat.com
Subject: More Gtk/XmHTML success!
X-Windows: Live the nightmare.
Hello guys,
Gtk/XmHTML port source on the CVS repository now:
- Scrolls.
- displays GIFs, animated GIFs.
- JPEGs.
- Colors work (yes, gdk_color_context code is functional).
- PNG are kind of strange.
I cant believe the port is behaving so well. It is rock solid, the
XmHTML engine is amazingly nice, it renders most of the stuff we have
thrown at it (modulo frames and tables, as I have not yet merged the
table code from Koen and have avoided doing the frame bits so far).
Best wishes,
Miguel.