Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate to gtk4 #804

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions core/GesturesUtils.vala
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,33 @@ namespace Maya.GesturesUtils {
static bool has_scrolled = false;
const uint INTERVAL = 500;

public void on_scroll_event_v2 (Gtk.EventControllerScroll event, double delta_x, double delta_y) {
double choice = delta_x;
if (((int)delta_x).abs () < ((int)delta_y).abs ()) {
choice = delta_y;
}

// It's mouse scroll !
if (choice == 1 || choice == -1) {
Calendar.EventStore.get_default ().change_month ((int) choice);
return;
}

if (has_scrolled == true) {
return;
}

if (choice > 0.3) {
reset_timer.begin ();
Calendar.EventStore.get_default ().change_month (1);
}

if (choice < -0.3) {
reset_timer.begin ();
Calendar.EventStore.get_default ().change_month (-1);
}
}

public bool on_scroll_event (Gdk.EventScroll event) {
double delta_x;
double delta_y;
Expand Down
2 changes: 1 addition & 1 deletion src/Grid/CalendarView.vala
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public class Maya.View.CalendarView : Gtk.Grid {
events |= Gdk.EventMask.KEY_PRESS_MASK;
events |= Gdk.EventMask.SCROLL_MASK;
events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;
add (stack);
attach (stack, 1, 1);
}

public override bool scroll_event (Gdk.EventScroll event) {
Expand Down
3 changes: 0 additions & 3 deletions src/Grid/EventButton.vala
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,6 @@ public class Maya.View.EventButton : Gtk.Revealer {
grid_style_context.add_provider (css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);

var event_box = new Gtk.EventBox ();
event_box.events |= Gdk.EventMask.BUTTON_PRESS_MASK;
event_box.events |= Gdk.EventMask.SCROLL_MASK;
event_box.events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;
event_box.add (internal_grid);

add (event_box);
Expand Down
1 change: 1 addition & 0 deletions src/Grid/Grid.vala
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ public class Grid : Gtk.Grid {
} else {
// Still update_day to get the color of etc. right
day = update_day (new GridDay (new_date), new_date, today, month_start);
message ("day updated for date %s", day.date.to_string ());
day.on_event_add.connect ((date) => on_event_add (date));
day.scroll_event.connect ((event) => {scroll_event (event); return false;});
day.focus_in_event.connect ((event) => {
Expand Down
92 changes: 52 additions & 40 deletions src/Grid/GridDay.vala
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ public class Maya.View.GridDay : Gtk.EventBox {
public bool draw_left_border = true;
private VAutoHider event_box;
private GLib.HashTable<string, EventButton> event_buttons;
private Gtk.EventControllerKey enter_press_controller;
private Gtk.GestureMultiPress double_click_gesture;
private Gtk.EventControllerScroll scroll_controller;
private Gtk.GestureDrag drag_and_drop_controller;

public bool in_current_month {
set {
Expand Down Expand Up @@ -71,9 +75,6 @@ public class Maya.View.GridDay : Gtk.EventBox {

// EventBox Properties
can_focus = true;
events |= Gdk.EventMask.BUTTON_PRESS_MASK;
events |= Gdk.EventMask.KEY_PRESS_MASK;
events |= Gdk.EventMask.SMOOTH_SCROLL_MASK;

unowned Gtk.StyleContext style_context = get_style_context ();
style_context.add_provider (style_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
Expand All @@ -94,12 +95,24 @@ public class Maya.View.GridDay : Gtk.EventBox {
add (container_grid);

// Signals and handlers
button_press_event.connect (on_button_press);
key_press_event.connect (on_key_press);
scroll_event.connect ((event) => {return GesturesUtils.on_scroll_event (event);});

Gtk.TargetEntry dnd = {"binary/calendar", 0, 0};
Gtk.drag_dest_set (this, Gtk.DestDefaults.MOTION, {dnd}, Gdk.DragAction.MOVE);
enter_press_controller = new Gtk.EventControllerKey (this) {
propagation_phase = Gtk.PropagationPhase.BUBBLE
};
enter_press_controller.key_pressed.connect (on_key_press);
double_click_gesture = new Gtk.GestureMultiPress (this) {
button = Gdk.BUTTON_PRIMARY,
propagation_phase = Gtk.PropagationPhase.BUBBLE
};
double_click_gesture.released.connect (on_button_press);
scroll_controller = new Gtk.EventControllerScroll (this, Gtk.EventControllerScrollFlags.VERTICAL);
scroll_controller.scroll.connect (GesturesUtils.on_scroll_event_v2);

drag_and_drop_controller = new Gtk.GestureDrag (this);
drag_and_drop_controller.drag_begin.connect ((event, x, y) => message ("x %f, y %f", x, y));
drag_and_drop_controller.drag_update.connect ((event, x, y) => message ("x %f, y %f", x, y));
drag_and_drop_controller.drag_end.connect (on_drag_released);
// Gtk.TargetEntry dnd = {"binary/calendar", 0, 0};
// Gtk.drag_dest_set (this, Gtk.DestDefaults.MOTION, {dnd}, Gdk.DragAction.MOVE);

this.bind_property ("date", label, "label", BindingFlags.SYNC_CREATE, (binding, srcval, ref targetval) => {
unowned var date = (GLib.DateTime) srcval.get_boxed ();
Expand All @@ -108,31 +121,12 @@ public class Maya.View.GridDay : Gtk.EventBox {
});
}

public override bool drag_drop (Gdk.DragContext context, int x, int y, uint time_) {
Gtk.drag_finish (context, true, false, time_);
Gdk.Atom atom = Gtk.drag_dest_find_target (this, context, Gtk.drag_dest_get_target_list (this));
Gtk.drag_get_data (this, context, atom, time_);
return true;
}

public override void drag_data_received (Gdk.DragContext context, int x, int y, Gtk.SelectionData selection_data, uint info, uint time_) {
var calmodel = Calendar.EventStore.get_default ();
var comp = calmodel.drag_component;
unowned ICal.Component icalcomp = comp.get_icalcomponent ();
E.Source src = comp.get_data ("source");
var start = icalcomp.get_dtstart ();
var end = icalcomp.get_dtend ();
var gap = date.get_day_of_month () - start.get_day ();
start.set_day (start.get_day () + gap);

if (!end.is_null_time ()) {
end.set_day (end.get_day () + gap);
icalcomp.set_dtend (end);
}

icalcomp.set_dtstart (start);
calmodel.update_event (src, comp, ECal.ObjModType.ALL);
}
// public override bool drag_drop (Gdk.DragContext context, int x, int y, uint time_) {
// Gtk.drag_finish (context, true, false, time_);
// Gdk.Atom atom = Gtk.drag_dest_find_target (this, context, Gtk.drag_dest_get_target_list (this));
// Gtk.drag_get_data (this, context, atom, time_);
// return true;
// }

public void add_event_button (EventButton button) {
string uid = button.get_uid ();
Expand Down Expand Up @@ -184,20 +178,38 @@ public class Maya.View.GridDay : Gtk.EventBox {
}
}

private bool on_button_press (Gdk.EventButton event) {
if (event.type == Gdk.EventType.2BUTTON_PRESS && event.button == Gdk.BUTTON_PRIMARY)
private void on_button_press (int n_press, double x, double y) {
if (n_press == 2)
on_event_add (date);

grab_focus ();
return false;
}

private bool on_key_press (Gdk.EventKey event) {
if (event.keyval == Gdk.keyval_from_name ("Return") ) {
private bool on_key_press (Gtk.EventControllerKey event, uint keyval, uint keycode, Gdk.ModifierType state) {
if (keyval == Gdk.keyval_from_name ("Return") ) {
on_event_add (date);
return true;
}

return false;
}

private void on_drag_released (Gtk.GestureDrag drag, double x, double y) {
message ("drag related on position x %f and y %f", x, y);
var calmodel = Calendar.EventStore.get_default ();
var comp = calmodel.drag_component;
unowned ICal.Component icalcomp = comp.get_icalcomponent ();
E.Source src = comp.get_data ("source");
var start = icalcomp.get_dtstart ();
var end = icalcomp.get_dtend ();
var gap = date.get_day_of_month () - start.get_day ();
start.set_day (start.get_day () + gap);

if (!end.is_null_time ()) {
end.set_day (end.get_day () + gap);
icalcomp.set_dtend (end);
}

icalcomp.set_dtstart (start);
calmodel.update_event (src, comp, ECal.ObjModType.ALL);
}
}