目标: 将fedora gnome-shell的notification通知由底部移动至顶部。
.
|-- altTab.js
|-- appDisplay.js
|-- appFavorites.js
|-- automountManager.js
|-- autorunManager.js
|-- boxpointer.js
|-- bubblePlace.txt
|-- calendar.js
|-- checkBox.js
|-- contactDisplay.js
|-- ctrlAltTab.js
|-- dash.js
|-- dateMenu.js
|-- dnd.js
|-- endSessionDialog.js
|-- environment.js
|-- extensionSystem.js
|-- flashspot.js
|-- iconGrid.js
|-- keyboard.js
|-- keyringPrompt.js
|-- layout.js
|-- lightbox.js
|-- link.js
|-- lookingGlass.js
|-- magnifierDBus.js
|-- magnifier.js
|-- main.js
|-- messageTray.js
|-- modalDialog.js
|-- networkAgent.js
|-- notificationDaemon.js
|-- overview.js
|-- panel.js
|-- panelMenu.js
|-- placeDisplay.js
|-- polkitAuthenticationAgent.js
|-- popupMenu.js
|-- positionChange.txt
|-- remoteSearch.js
|-- runDialog.js
|-- scripting.js
|-- searchDisplay.js
|-- search.js
|-- shellDBus.js
|-- shellEntry.js
|-- shellMountOperation.js
|-- status
| |-- accessibility.js
| |-- bluetooth.js
| |-- keyboard.js
| |-- network.js
| |-- power.js
| `-- volume.js
|-- statusIconDispatcher.js
|-- telepathyClient.js
|-- tweener.js
|-- userMenu.js
|-- viewSelector.js
|-- wanda.js
|-- windowAttentionHandler.js
|-- windowManager.js
|-- workspace.js
|-- workspacesView.js
|-- workspaceSwitcherPopup.js
|-- workspaceThumbnail.js
`-- xdndHandler.js
UI中的文件如上列表所示,调试过程中主要用到的工具有: grep -rni , find, vim filename +linenumber 通过这三个工具实现对目标文件的锁定。
实现初步定位后,根据调试九法的初始步骤,一步一步的进行精确定位,直至定位到目标行。
相关对象: this._notificationBin 这个对象设置了通知消息的初始位置(y坐标) 相关函数: _showNotification / this._updateShowingNotification
if (!this._notification.expanded)
tweenParams.y = -(Main.laffyoutManager.primaryMonitor.height - Main.panel.actor.height * 2 - 10);
改变动画的目标坐标, 将坐标设在屏幕上方。
发现expanded的notification还是在底下,跟踪发现还是走的 _showNotification 函数,所以跟下去,最终确认在 _onNotificationExpanded 函数中更改_notificationBin.y的坐标。继续测试, done!
gnome-shell默认是出现在中间,hacking一段,找到结果,作如下修改可以实现。
messageTray.js中的MessageTray的初始化函数中有这么一句:
this._notificationBin = new St.Bin();
如若是想让其出现在左边,则修改成如下:
this._notificationBin = new St.Bin({x_align: St.Align.START});
出现在右下角?
this._notificationBin = new St.Bin({x_align: St.Align.END});