summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <owt1@cornell.edu>1998-03-24 05:27:00 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-03-24 05:27:00 +0000
commit102b1de4b4e7939e9fe513ee929bc073eaa11741 (patch)
tree84f168aee1ac87870cc2ab9315090c02b4d3e54e /gtk
parentd362159181f550340709f46621e3da840cd5fb82 (diff)
downloadgtk+-102b1de4b4e7939e9fe513ee929bc073eaa11741.tar.gz
Use reversed arrow for menus ala Motif (and fix Options menus, which had X
Tue Mar 24 00:17:42 1998 Owen Taylor <owt1@cornell.edu> * gtk/gtkcombo.c gtk/gtkmenu.c: Use reversed arrow for menus ala Motif (and fix Options menus, which had X cursor before), and show normal arrow when inside ComboBox. * gtk/gtkfilesel.c: Various memory leaks removed, as pointed out by Mattias.Gronlund" <Mattias.Gronlund@sa.erisoft.se> * docs/gtk_tut.sgml: Change compiling explaination to refer to gtk-config. (From: johannes@nada.kth.se (Johannes Keukelaar))
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcombo.c24
-rw-r--r--gtk/gtkfilesel.c24
-rw-r--r--gtk/gtkmenu.c5
3 files changed, 33 insertions, 20 deletions
diff --git a/gtk/gtkcombo.c b/gtk/gtkcombo.c
index ebfd93e5c6..05e510293d 100644
--- a/gtk/gtkcombo.c
+++ b/gtk/gtkcombo.c
@@ -22,6 +22,7 @@
#include "gtklabel.h"
#include "gtklist.h"
#include "gtkentry.h"
+#include "gtkeventbox.h"
#include "gtkbutton.h"
#include "gtklistitem.h"
#include "gtkscrolledwindow.h"
@@ -342,7 +343,10 @@ gtk_combo_popup_list (GtkButton * button, GtkCombo * combo)
gtk_widget_grab_focus (combo->popwin);
gtk_grab_add (combo->popwin);
gdk_pointer_grab (combo->popwin->window, TRUE,
- GDK_BUTTON_PRESS_MASK, NULL, NULL, GDK_CURRENT_TIME);
+ GDK_BUTTON_PRESS_MASK |
+ GDK_BUTTON_RELEASE_MASK |
+ GDK_POINTER_MOTION_MASK,
+ NULL, NULL, GDK_CURRENT_TIME);
}
#if 0
@@ -442,6 +446,8 @@ gtk_combo_init (GtkCombo * combo)
{
GtkWidget *arrow;
GtkWidget *frame;
+ GtkWidget *event_box;
+ GdkCursor *cursor;
combo->case_sensitive = 0;
combo->value_in_list = 0;
@@ -473,22 +479,34 @@ gtk_combo_init (GtkCombo * combo)
combo->popwin = gtk_window_new (GTK_WINDOW_POPUP);
gtk_widget_ref (combo->popwin);
gtk_window_set_policy (GTK_WINDOW (combo->popwin), 1, 1, 0);
+
+ gtk_widget_set_events (combo->popwin, GDK_KEY_PRESS_MASK);
+
+ event_box = gtk_event_box_new ();
+ gtk_container_add (GTK_CONTAINER (combo->popwin), event_box);
+ gtk_widget_show (event_box);
+
+ gtk_widget_realize (event_box);
+ cursor = gdk_cursor_new (GDK_TOP_LEFT_ARROW);
+ gdk_window_set_cursor (event_box->window, cursor);
+ gdk_cursor_destroy (cursor);
frame = gtk_frame_new (NULL);
- gtk_container_add (GTK_CONTAINER (combo->popwin), frame);
+ gtk_container_add (GTK_CONTAINER (event_box), frame);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
gtk_widget_show (frame);
combo->popup = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (combo->popup),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
combo->list = gtk_list_new ();
gtk_list_set_selection_mode(GTK_LIST(combo->list), GTK_SELECTION_BROWSE);
gtk_container_add (GTK_CONTAINER (frame), combo->popup);
gtk_container_add (GTK_CONTAINER (combo->popup), combo->list);
gtk_widget_show (combo->list);
gtk_widget_show (combo->popup);
- gtk_widget_set_events (combo->popwin, gtk_widget_get_events (combo->popwin) | GDK_KEY_PRESS_MASK);
+
combo->list_change_id = gtk_signal_connect (GTK_OBJECT (combo->list), "selection_changed",
(GtkSignalFunc) gtk_combo_update_entry, combo);
gtk_signal_connect (GTK_OBJECT (combo->popwin), "key_press_event",
diff --git a/gtk/gtkfilesel.c b/gtk/gtkfilesel.c
index 1328f7e980..a334c73f8c 100644
--- a/gtk/gtkfilesel.c
+++ b/gtk/gtkfilesel.c
@@ -641,6 +641,7 @@ gtk_file_selection_destroy (GtkObject *object)
{
callback_arg = list->data;
g_free (callback_arg->directory);
+ g_free (callback_arg);
list = list->next;
}
g_list_free (filesel->history_list);
@@ -1072,7 +1073,6 @@ gtk_file_selection_update_history_menu (GtkFileSelection *fs,
GtkWidget *menu_item;
GList *list;
gchar *current_dir;
- gchar *directory;
gint dir_len;
gint i;
@@ -1087,6 +1087,7 @@ gtk_file_selection_update_history_menu (GtkFileSelection *fs,
while (list) {
callback_arg = list->data;
g_free (callback_arg->directory);
+ g_free (callback_arg);
list = list->next;
}
g_list_free (fs->history_list);
@@ -1111,7 +1112,6 @@ gtk_file_selection_update_history_menu (GtkFileSelection *fs,
if (i != dir_len)
current_dir[i + 1] = '\0';
menu_item = gtk_menu_item_new_with_label (current_dir);
- directory = g_strdup (current_dir);
callback_arg = g_new (HistoryCallbackArg, 1);
callback_arg->menu_item = menu_item;
@@ -1122,7 +1122,7 @@ gtk_file_selection_update_history_menu (GtkFileSelection *fs,
if (dir_len == i) {
callback_arg->directory = g_strdup ("");
} else {
- callback_arg->directory = directory;
+ callback_arg->directory = g_strdup (current_dir);
}
fs->history_list = g_list_append (fs->history_list, callback_arg);
@@ -1572,6 +1572,8 @@ cmpl_free_state (CompletionState* cmpl_state)
if (cmpl_state->user_dir_name_buffer)
g_free (cmpl_state->user_dir_name_buffer);
+ if (cmpl_state->user_home_dir)
+ g_free (cmpl_state->user_home_dir);
if (cmpl_state->user_directories)
g_free (cmpl_state->user_directories);
if (cmpl_state->the_completion.text)
@@ -2485,7 +2487,7 @@ static gint
get_pwdb(CompletionState* cmpl_state)
{
struct passwd *pwd_ptr;
- gchar* buf_ptr, *home_dir = NULL;
+ gchar* buf_ptr;
gint len = 0, i, count = 0;
if(cmpl_state->user_dir_name_buffer)
@@ -2511,10 +2513,8 @@ get_pwdb(CompletionState* cmpl_state)
cmpl_errno = errno;
goto error;
}
- home_dir = pwd_ptr->pw_dir;
-
- len += strlen(home_dir);
- len += 1;
+ /* Allocate this separately, since it might be filled in elsewhere */
+ cmpl_state->user_home_dir = g_strdup (pwd_ptr->pw_dir);
}
setpwent ();
@@ -2525,14 +2525,6 @@ get_pwdb(CompletionState* cmpl_state)
buf_ptr = cmpl_state->user_dir_name_buffer;
- if (!cmpl_state->user_home_dir)
- {
- strcpy(buf_ptr, home_dir);
- cmpl_state->user_home_dir = buf_ptr;
- buf_ptr += strlen(buf_ptr);
- buf_ptr += 1;
- }
-
for(i = 0; i < count; i += 1)
{
pwd_ptr = getpwent();
diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c
index 12a804ec8b..cf83d262b7 100644
--- a/gtk/gtkmenu.c
+++ b/gtk/gtkmenu.c
@@ -323,11 +323,14 @@ gtk_menu_popup (GtkMenu *menu,
if (xgrab_shell && (!GTK_MENU_SHELL (xgrab_shell)->have_xgrab))
{
+ GdkCursor *cursor = gdk_cursor_new (GDK_ARROW);
+
GTK_MENU_SHELL (xgrab_shell)->have_xgrab =
(gdk_pointer_grab (xgrab_shell->window, TRUE,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK,
- NULL, NULL, activate_time) == 0);
+ NULL, cursor, activate_time) == 0);
+ gdk_cursor_destroy (cursor);
}
gtk_grab_add (GTK_WIDGET (menu));