Merge lp:~ted/ido/calendar-fix into lp:ido/0.3

Proposed by Ted Gould
Status: Merged
Merged at revision: 90
Proposed branch: lp:~ted/ido/calendar-fix
Merge into: lp:ido/0.3
Diff against target: 85 lines (+50/-19)
1 file modified
src/idocalendarmenuitem.c (+50/-19)
To merge this branch: bzr merge lp:~ted/ido/calendar-fix
Reviewer Review Type Date Requested Status
Robert Carr (community) Approve
Indicator Applet Developers Pending
Review via email: mp+75792@code.launchpad.net

Description of the change

Pass button events along to the calendar. Turns out the calender uses which GDK Window is in the event for filtering out the events so we have to do some of the hit mask stuff ourselves :-/ But it works now.

To post a comment you must log in.
lp:~ted/ido/calendar-fix updated
91. By Ted Gould

Freeing the new event

Revision history for this message
Robert Carr (robertcarr) wrote :

+1

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/idocalendarmenuitem.c'
--- src/idocalendarmenuitem.c 2011-06-21 16:55:01 +0000
+++ src/idocalendarmenuitem.c 2011-09-16 18:07:25 +0000
@@ -196,31 +196,62 @@
196ido_calendar_menu_item_button_press (GtkWidget *widget,196ido_calendar_menu_item_button_press (GtkWidget *widget,
197 GdkEventButton *event)197 GdkEventButton *event)
198{198{
199 GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;199 GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;
200200
201 if (event->button == 1)201 if (event->button == 1) {
202 {202 if (gtk_widget_get_window (calendar) != NULL) {
203 if (gtk_widget_get_window (calendar) != NULL)203 gdk_window_raise (gtk_widget_get_window (calendar));
204 {204 }
205 gdk_window_raise (gtk_widget_get_window (calendar));205
206 }206 if (!gtk_widget_has_focus (calendar)) {
207207 gtk_widget_grab_focus (calendar);
208 if (!gtk_widget_has_focus (calendar))208 }
209 {209
210 gtk_widget_grab_focus (calendar);210#if GTK_CHECK_VERSION (3, 0, 0)
211 }211 GdkEvent * newevent = gdk_event_copy((GdkEvent *)(event));
212212 GList * children = gdk_window_get_children(gtk_widget_get_window(calendar));
213 return TRUE;213 GList * child;
214 }214
215215 gint root_x = event->x_root;
216 return FALSE;216 gint root_y = event->y_root;
217
218 for (child = children; child != NULL; child = g_list_next(child)) {
219 gint newx, newy;
220 gint winx, winy;
221 GdkWindow * newwindow = (GdkWindow*)child->data;
222
223 ((GdkEventButton *)newevent)->window = newwindow;
224
225 gdk_window_get_origin(newwindow, &winx, &winy);
226 newx = root_x - winx;
227 newy = root_y - winy;
228
229 if (newx >= 0 && newy >= 0 && newx < gdk_window_get_width(newwindow) && newy < gdk_window_get_height(newwindow)) {
230 ((GdkEventButton *)newevent)->x = newx;
231 ((GdkEventButton *)newevent)->y = newy;
232
233 GTK_WIDGET_GET_CLASS(calendar)->button_press_event(GTK_WIDGET(calendar), (GdkEventButton*)newevent);
234 }
235 }
236
237 ((GdkEventButton *)newevent)->window = event->window;
238 gdk_event_free(newevent);
239#endif
240
241 return TRUE;
242 }
243
244 return FALSE;
217}245}
218246
219static gboolean247static gboolean
220ido_calendar_menu_item_button_release (GtkWidget *widget,248ido_calendar_menu_item_button_release (GtkWidget *widget,
221 GdkEventButton *event)249 GdkEventButton *event)
222{250{
223 // GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;251#if GTK_CHECK_VERSION (3, 0, 0)
252 GtkWidget *calendar = IDO_CALENDAR_MENU_ITEM (widget)->priv->calendar;
253 GTK_WIDGET_GET_CLASS(calendar)->button_release_event(GTK_WIDGET(calendar), event);
254#endif
224255
225 return TRUE;256 return TRUE;
226}257}

Subscribers

People subscribed via source and target branches